1
1
Граф коммитов

107 Коммитов

Автор SHA1 Сообщение Дата
George Bosilca
a0248f736c Move the if around the for loop.
Don't release memory that has not been allocated by the freelist.

This commit was SVN r20530.
2009-02-12 17:29:14 +00:00
Rainer Keller
340d72a166 - There is no dependancy on mpool -- so no need to include
This commit was SVN r20353.
2009-01-27 16:18:56 +00:00
Jeff Squyres
fa30c6d8bc Cosmetic change; remove a tab.
This commit was SVN r20180.
2009-01-02 17:48:24 +00:00
Shiqing Fan
d129578694 Small fix for including unistd.h header file.
This commit was SVN r18758.
2008-06-27 16:25:31 +00:00
Lenny Verkhovsky
937380df2f Memory check after allocation in SM fixed
This commit was SVN r18706.
2008-06-22 14:52:44 +00:00
Lenny Verkhovsky
f4811d6c4d NUMA Awareness support. Gleb's patch
This commit was SVN r18658.
2008-06-15 13:43:28 +00:00
Ralph Castain
9613b3176c Effectively revert the orte_output system and return to direct use of opal_output at all levels. Retain the orte_show_help subsystem to allow aggregation of show_help messages at the HNP.
After much work by Jeff and myself, and quite a lot of discussion, it has become clear that we simply cannot resolve the infinite loops caused by RML-involved subsystems calling orte_output. The original rationale for the change to orte_output has also been reduced by shifting the output of XML-formatted vs human readable messages to an alternative approach.

I have globally replaced the orte_output/ORTE_OUTPUT calls in the code base, as well as the corresponding .h file name. I have test compiled and run this on the various environments within my reach, so hopefully this will prove minimally disruptive.

This commit was SVN r18619.
2008-06-09 14:53:58 +00:00
Gleb Natapov
5fabade090 Use payload_buffer_alignment value for payload alignment.
This commit was SVN r18493.
2008-05-26 08:29:02 +00:00
Jeff Squyres
e7ecd56bd2 This commit represents a bunch of work on a Mercurial side branch. As
such, the commit message back to the master SVN repository is fairly
long.

= ORTE Job-Level Output Messages =

Add two new interfaces that should be used for all new code throughout
the ORTE and OMPI layers (we already make the search-and-replace on
the existing ORTE / OMPI layers):

 * orte_output(): (and corresponding friends ORTE_OUTPUT,
   orte_output_verbose, etc.)  This function sends the output directly
   to the HNP for processing as part of a job-specific output
   channel.  It supports all the same outputs as opal_output()
   (syslog, file, stdout, stderr), but for stdout/stderr, the output
   is sent to the HNP for processing and output.  More on this below.
 * orte_show_help(): This function is a drop-in-replacement for
   opal_show_help(), with two differences in functionality:
   1. the rendered text help message output is sent to the HNP for
      display (rather than outputting directly into the process' stderr
      stream)
   1. the HNP detects duplicate help messages and does not display them
      (so that you don't see the same error message N times, once from
      each of your N MPI processes); instead, it counts "new" instances
      of the help message and displays a message every ~5 seconds when
      there are new ones ("I got X new copies of the help message...")

opal_show_help and opal_output still exist, but they only output in
the current process.  The intent for the new orte_* functions is that
they can apply job-level intelligence to the output.  As such, we
recommend that all new ORTE and OMPI code use the new orte_*
functions, not thei opal_* functions.

=== New code ===

For ORTE and OMPI programmers, here's what you need to do differently
in new code:

 * Do not include opal/util/show_help.h or opal/util/output.h.
   Instead, include orte/util/output.h (this one header file has
   declarations for both the orte_output() series of functions and
   orte_show_help()).
 * Effectively s/opal_output/orte_output/gi throughout your code.
   Note that orte_output_open() takes a slightly different argument
   list (as a way to pass data to the filtering stream -- see below),
   so you if explicitly call opal_output_open(), you'll need to
   slightly adapt to the new signature of orte_output_open().
 * Literally s/opal_show_help/orte_show_help/.  The function signature
   is identical.

=== Notes ===

 * orte_output'ing to stream 0 will do similar to what
   opal_output'ing did, so leaving a hard-coded "0" as the first
   argument is safe.
 * For systems that do not use ORTE's RML or the HNP, the effect of
   orte_output_* and orte_show_help will be identical to their opal
   counterparts (the additional information passed to
   orte_output_open() will be lost!).  Indeed, the orte_* functions
   simply become trivial wrappers to their opal_* counterparts.  Note
   that we have not tested this; the code is simple but it is quite
   possible that we mucked something up.

= Filter Framework =

Messages sent view the new orte_* functions described above and
messages output via the IOF on the HNP will now optionally be passed
through a new "filter" framework before being output to
stdout/stderr.  The "filter" OPAL MCA framework is intended to allow
preprocessing to messages before they are sent to their final
destinations.  The first component that was written in the filter
framework was to create an XML stream, segregating all the messages
into different XML tags, etc.  This will allow 3rd party tools to read
the stdout/stderr from the HNP and be able to know exactly what each
text message is (e.g., a help message, another OMPI infrastructure
message, stdout from the user process, stderr from the user process,
etc.).

Filtering is not active by default.  Filter components must be
specifically requested, such as:

{{{
$ mpirun --mca filter xml ...
}}}

There can only be one filter component active.

= New MCA Parameters =

The new functionality described above introduces two new MCA
parameters:

 * '''orte_base_help_aggregate''': Defaults to 1 (true), meaning that
   help messages will be aggregated, as described above.  If set to 0,
   all help messages will be displayed, even if they are duplicates
   (i.e., the original behavior).
 * '''orte_base_show_output_recursions''': An MCA parameter to help
   debug one of the known issues, described below.  It is likely that
   this MCA parameter will disappear before v1.3 final.

= Known Issues =

 * The XML filter component is not complete.  The current output from
   this component is preliminary and not real XML.  A bit more work
   needs to be done to configure.m4 search for an appropriate XML
   library/link it in/use it at run time.
 * There are possible recursion loops in the orte_output() and
   orte_show_help() functions -- e.g., if RML send calls orte_output()
   or orte_show_help().  We have some ideas how to fix these, but
   figured that it was ok to commit before feature freeze with known
   issues.  The code currently contains sub-optimal workarounds so
   that this will not be a problem, but it would be good to actually
   solve the problem rather than have hackish workarounds before v1.3 final.

This commit was SVN r18434.
2008-05-13 20:00:55 +00:00
George Bosilca
17317faed4 Make visible the exported functions.
This commit was SVN r17810.
2008-03-11 19:26:38 +00:00
Tim Prins
84b2099fe8 Remove the now-unused orte_value_array. As this is the last 'class' split between orte and ompi, remove the big comment about the split in ompi_bitmap.
Also, update some properties (source files should not be executeable...), and remove a couple unneeded inclusions of orte_proc_table.h

This commit was SVN r17655.
2008-02-28 21:39:42 +00:00
Tim Prins
889f6c79fe Properly initialize the freelist in the constructor.
This commit was SVN r17175.
2008-01-22 18:17:06 +00:00
George Bosilca
841ae01bc9 Add OPAL_LIKELY to the freelist.
This commit was SVN r17142.
2008-01-15 05:44:28 +00:00
George Bosilca
bd72057364 Cleanup the comments.
This commit was SVN r17094.
2008-01-09 20:34:37 +00:00
George Bosilca
906e8bf1d1 Replace the ompi_pointer_array with opal_pointer_array. The next step
(sometimes after the merge with the ORTE branch), the opal_pointer_array
will became the only pointer_array implementation (the orte_pointer_array
will be removed).

This commit was SVN r17007.
2007-12-21 06:02:00 +00:00
Rich Graham
e4646a4dd5 going through the ompi_free_list_init_ex, fl_payload_buffer_size and
fl_payload_buffer_alignment were not being set.

This commit was SVN r16641.
2007-11-02 17:51:32 +00:00
Rich Graham
27a748e7eb change all instances of ompi_free_list_init to ompi_free_list_init_new. Header
and payload data are specified separately at this stage.

This commit was SVN r16633.
2007-11-01 23:38:50 +00:00
Rich Graham
aa82acd34c continuing the incremental changes. fl_elem_class renamed fl_frag_class,
and ompi_free_list_init_new() and ompi_free_list_init_ex_new() were added.
Next step will be to start converting from ompi_free_list_init to()
ompi_free_list_init_new(), and then remove ompi_free_list_init(), and
rename ompi_free_list_init_new() back to ompi_free_list_init().  The merge
of the branch with the trunk was so substantial, it is far easeir to
re-implement the changes in the trunk, rather than trying to fix the bugs
the merge brought in ...

This commit was SVN r16630.
2007-11-01 17:25:12 +00:00
Rich Graham
52fb318950 starting to put in the changes for ompi_free_list_t. fl_elem_size is renamed
to fl_frag_size, fl_alignment is renamed to fl_frag_alignment, and
fl_payload_buffer_size and fl_payload_buffer_alignment are added.

This commit was SVN r16629.
2007-11-01 16:47:44 +00:00
George Bosilca
e724ca0a1f Remodel the ompi_free_list a little. The free_list_memory is in
fact a free_list_item so instead of having a struct, use typedef
to make them equivalent. Modify the parallel debuggers support
in order to allow them access to the internal types even when
we have an optimized build.

This commit was SVN r16567.
2007-10-25 16:47:54 +00:00
Shiqing Fan
a0660f4deb - Just some type casts.
This commit was SVN r16100.
2007-09-12 15:29:58 +00:00
Jeff Squyres
8ace07efed This commit brings in two major things:
1. Galen's fine-grain control of queue pair resources in the openib
   BTL.
1. Pasha's new implementation of asychronous HCA event handling.

Pasha's new implementation doesn't take much explanation, but the new
"multifrag" stuff does.  

Note that "svn merge" was not used to bring this new code from the
/tmp/ib_multifrag branch -- something Bad happened in the periodic
trunk pulls on that branch making an actual merge back to the trunk
effectively impossible (i.e., lots and lots of arbitrary conflicts and
artifical changes).  :-(

== Fine-grain control of queue pair resources ==

Galen's fine-grain control of queue pair resources to the OpenIB BTL
(thanks to Gleb for fixing broken code and providing additional
functionality, Pasha for finding broken code, and Jeff for doing all
the svn work and regression testing).

Prior to this commit, the OpenIB BTL created two queue pairs: one for
eager size fragments and one for max send size fragments.  When the
use of the shared receive queue (SRQ) was specified (via "-mca
btl_openib_use_srq 1"), these QPs would use a shared receive queue for
receive buffers instead of the default per-peer (PP) receive queues
and buffers.  One consequence of this design is that receive buffer
utilization (the size of the data received as a percentage of the
receive buffer used for the data) was quite poor for a number of
applications.

The new design allows multiple QPs to be specified at runtime.  Each
QP can be setup to use PP or SRQ receive buffers as well as giving
fine-grained control over receive buffer size, number of receive
buffers to post, when to replenish the receive queue (low water mark)
and for SRQ QPs, the number of outstanding sends can also be
specified.  The following is an example of the syntax to describe QPs
to the OpenIB BTL using the new MCA parameter btl_openib_receive_queues:

{{{
-mca btl_openib_receive_queues \
     "P,128,16,4;S,1024,256,128,32;S,4096,256,128,32;S,65536,256,128,32"
}}}

Each QP description is delimited by ";" (semicolon) with individual
fields of the QP description delimited by "," (comma).  The above
example therefore describes 4 QPs.

The first QP is:

    P,128,16,4

Meaning: per-peer receive buffer QPs are indicated by a starting field
of "P"; the first QP (shown above) is therefore a per-peer based QP.
The second field indicates the size of the receive buffer in bytes
(128 bytes).  The third field indicates the number of receive buffers
to allocate to the QP (16).  The fourth field indicates the low
watermark for receive buffers at which time the BTL will repost
receive buffers to the QP (4).

The second QP is:

    S,1024,256,128,32

Shared receive queue based QPs are indicated by a starting field of
"S"; the second QP (shown above) is therefore a shared receive queue
based QP.  The second, third and fourth fields are the same as in the
per-peer based QP.  The fifth field is the number of outstanding sends
that are allowed at a given time on the QP (32).  This provides a
"good enough" mechanism of flow control for some regular communication
patterns.

QPs MUST be specified in ascending receive buffer size order.  This
requirement may be removed prior to 1.3 release.

This commit was SVN r15474.
2007-07-18 01:15:59 +00:00
George Bosilca
6e8d25fdaf rearrange the code a bit.
This commit was SVN r15297.
2007-07-05 22:47:31 +00:00
Rainer Keller
6f9251ed39 - Small fixes by PGI -Minform=inform
This commit was SVN r14524.
2007-04-26 08:16:07 +00:00
Gleb Natapov
e5450613b5 Add new SM BTL parameter btl_sm_cb_max_num. If set to value greater then zero
it limits the number of circular buffers allocated between each pair of peers.
This allows for more tight memory usage control.

This commit was SVN r14120.
2007-03-22 12:21:42 +00:00
Brian Barrett
f6be04ff37 be a bit more careful with parens than the r13992 fix
This commit was SVN r13996.

The following SVN revision numbers were found above:
  r13992 --> open-mpi/ompi@3cbac958eb
2007-03-09 16:39:23 +00:00
Brian Barrett
3cbac958eb fix warning about types
This commit was SVN r13992.
2007-03-09 02:32:22 +00:00
Jeff Squyres
b94a39236b Submitted by Gleb, reviewed by Rich:
Queue_empty is determined by the reader, and is it's local view.
However, the writer may continue writing to this queue.  The decision
to go on to the next cb_fifo is done in an atomic region, checking the
writer's view.  The writer also "changes it's view" in an atomic
region protected by the same lock.

This commit was SVN r13968.
2007-03-08 16:51:59 +00:00
Gleb Natapov
be018944d2 Clean up circular buffer implementation. Get rid of _same_base_address()
functions by pre-calculating everything in advance.

This commit was SVN r13923.
2007-03-05 14:27:26 +00:00
Gleb Natapov
90fb58de4f When frags are allocated from mpool by free_list the frag structure is also
allocated from mpool memory (which is registered memory for RDMA transports)
This is not a problem for a small jobs, but for a big number of ranks an
amount of waisted memory is big.

This commit was SVN r13921.
2007-03-05 14:17:50 +00:00
Rainer Keller
0889ebd59f - Eliminate warnings, that PGI-6.2.5 issues with -Minform=inform
This commit was SVN r13840.
2007-02-28 08:36:34 +00:00
Pavel Shamis
edeab0e912 Adding Mellanox Technologies copyright to files touched by Mellanox.
This commit was SVN r13669.
2007-02-15 18:03:20 +00:00
Gleb Natapov
4d4b0a022a Add error callback to sm BTL. Call it when allocation of the initial circular
buffer fails. If cb is already allocated, but it is full and allocation of
additional cb fails, we spin waiting for receiver to free space in existing
cb.

This commit was SVN r13635.
2007-02-13 12:01:36 +00:00
Jeff Squyres
33619d6b43 Minor fixes for the ompi_bitmap class that were found while
investivating #817:

 * Remove use of legal_numbits member and always just use the full
   size of the array.  There was a corner case where legal_numbits was
   not an even multiple of the number of bits in the array where bits
   would not get freed properly, ususally causing wasted fortran
   MPI handles, or, as in the case of #817, wasted attribute keyvals
   (i.e., the user freed them, but the bitmap didn't reflect the
   free).
 * Re-order some error checks to ensure that we don't segv (we don't
   currently trigger this problem anywhere; I just noticed it while
   doing the other attribute keyval and legal_numbits work).

Since this change affects all Fortran MPI handles, I ran all the intel
and ibm tests and all still pass with this change.

This commit was SVN r13561.
2007-02-08 18:20:36 +00:00
Gleb Natapov
4e5deec496 Fix previous patch. In case of different sm base use pointer to tail after
recalculating it.

This commit was SVN r13557.
2007-02-08 14:59:18 +00:00
Gleb Natapov
c56497cf46 Fix race condition, that happens in circular buffer if consumer drained full
cb before producer set cb_overflow flag.

This commit was SVN r13552.
2007-02-08 07:16:14 +00:00
George Bosilca
575075ea77 typo.
This commit was SVN r13510.
2007-02-06 16:53:44 +00:00
Jeff Squyres
c91fcd7fbd Fix a bunch of minor typos submitted by Bernhard Fischer.
This commit was SVN r13505.
2007-02-06 12:00:30 +00:00
Rainer Keller
235f87fd14 - Small cleanups, getting rid of variables, using
index early, etc.

This commit was SVN r13222.
2007-01-19 23:28:04 +00:00
Rainer Keller
125ba1acfa - Reduce the amount of warnings with -Wshadow -- mainly due to
usage of index and abs in inline-fcts in header files.

This commit was SVN r13217.
2007-01-19 19:48:06 +00:00
Gleb Natapov
190e7a27cd Merge with gleb-mpool branch. All RDMA components use same mpool now (rdma).
udapl/openib/vapi/gm mpools a deprecated. rdma mpool has parameter that allows
to limit its size mpool_rdma_rcache_size_limit (default is 0 - unlimited).

This commit was SVN r12878.
2006-12-17 12:26:41 +00:00
George Bosilca
b51b87a4aa The correct way to compute the difference between the actual size and the
expected size, based on the comment few lines before.

This commit was SVN r12235.
2006-10-20 19:33:55 +00:00
George Bosilca
d7268557a8 Complete the SM BTL changes. Now all displacements are ptrdiff_t and there is
no warnings about any issue with signed/unsigned.

This commit was SVN r12234.
2006-10-20 19:28:12 +00:00
George Bosilca
06563b5dec Last set of explicit conversions. We are now close to the zero warnings on
all platforms. The only exceptions (and I will not deal with them
anytime soon) are on Windows:
- the write functions which require the length to be an int when it's
  a size_t on all UNIX variants.
- all iovec manipulation functions where the iov_len is again an int
  when it's a size_t on most of the UNIXes.
As these only happens on Windows, so I think we're set for now :)

This commit was SVN r12215.
2006-10-20 03:57:44 +00:00
George Bosilca
e81d38f322 Remove a function that was just a proof of concept. The same approach is
not used by the TotalView support.

This commit was SVN r12214.
2006-10-20 03:34:16 +00:00
George Bosilca
33f300f636 I don't know what it was supposed to do but I'm quite sure it didn't do it correctly.
Just follow inc_num and you will understand. Now _resize will grow the list to match
the required number of elements as described in the comment in the .h file.

This commit was SVN r12074.
2006-10-10 14:47:51 +00:00
Pavel Shamis
e400da01bc Fix of typo error introduced in revision 12053.
Reviewed by: Jeff

This commit was SVN r12071.
2006-10-10 11:58:29 +00:00
Brian Barrett
51b2a0fd3f A couple of changes to improve shared memory behavior when resources get
constrained:

  * Make sure we always have a number of eager fragments available
    that scales with the number of processes communicating with
    a given proc over shared memory
  * Use FREE_LIST_GET instead of FREE_LIST_WAIT to return an
    error to the PML when resource exhaustion occurs
  * Don't dereference the frag during alloc unless we're sure
    it's not NULL

Reviewed by: Galen

Refs trac:413

This commit was SVN r12053.

The following Trac tickets were found above:
  Ticket 413 --> https://svn.open-mpi.org/trac/ompi/ticket/413
2006-10-06 21:13:49 +00:00
George Bosilca
2411ad74e4 Fix the bug #315. If there are multiple threads waiting for a free_list item
then use broadcast in order to wake them up. If there is only one then use signal
(which is supposed to be faster) and of course if there are no threads
waiting then just continue.

This commit was SVN r12049.
2006-10-06 16:17:50 +00:00
George Bosilca
2029284820 Typo.
This commit was SVN r11695.
2006-09-18 17:57:55 +00:00