- using port 1 while ignoring others
- added 2 free lists for varying size frags
- query queue pair for max inline send for small fragments
This commit was SVN r6007.
1. for the send operation: the convertor attached to the request is initialized by the
_INIT macro and it will be used as is by the PTLs for the first fragment. For the
others fragments it will be cloned by the PTLs.
2. for the receive operation: I create a macro MATCHED which create a convertor (attached
to the receive PML request). The PTLs can use this convertor for the first fragment,
and clone it forr the others fragments.
Playing with positions ... The position argument change it's type and prototype. Now it's
a size_t to be consistent with the rest of thee PML/PTL and it's a pointer to a size_t.
I need this pointer to correct the value of the position as some of the convertors are
not allowed to stop in the middle of a basic datatype (cannnot copy 2 bytes from an int).
This commit was SVN r5987.
functions to create/clone a convertor, with the goal of reducing the time spend on
the convertor related functions, thus reducing the latency.
This commit was SVN r5985.
1. Change the hardcoded "8" to "SIZE_OF_CHAR"
2. Change "cover_bit" to "resize"
Also removed an extra "if" check that was duplicative.
Again, tested on up to 100 processes.
This commit was SVN r5983.
For anyone interested, the problem stemmed from two things:
1. a bug in the ompi_bitmap utility (which I copied to orte_bitmap to avoid unintentionally disturbing something else) that causes the bitmap NOT to expand unless the caller asks for a bit that is more than one byte outside the current array size. The unit test didn't pick it up because it doesn't check that close to the boundary.
2. a "feature" in the ompi_bitmap utility that only expands the array if you try to SET a bit outside the current boundary, but NOT if you try to CLEAR a bit outside the array limit. This appears intentional as the unit test checks for this behavior, but I hadn't been expecting the asymmetry.
The orte_bitmap utility now appropriately expands in both circumstances. I also added a function to expand the array so it "covers" a bit location without setting or clearing it. The function allows you to ensure the array is big enough to handle the specified bit, but leave the bit alone if it already is there (the other functions would set/clear it if it was).
I've tested it with up to 100 processes without problem.
This commit was SVN r5980.
use ebx in inline assembly. For the beta, just don't inline the 64
bit atomic compare and swap on IA32 (cmpxchg8 requires use of ebx).
Any caller of the function will fall back to the non-inline version.
This commit was SVN r5957.
A new file has been added (new_pack.c). It is not yet used but inside I try to create
a more cleaner ppack/unpack function. There is still work in progress on this file.
New !!! In debug mode there is a gdb friendly function where you can set a breakpoint
(ompi_ddt_safeguard_pointer_debug_breakpoint) in order to see what's the status of
the convertor and the internal veraible when the ddt engine try to do a pack/unpack
outside the user buffer.
A new field in the convertor structure. This field get initialized in the convertor_init_for_*
functions and point to the datatype description that have to be used by the pack/unpack
functions. Until now each one of them have a test in the begining to detect which data
representation to be used (normal or optimized). Now this field point directly to the correct
one.
Change names for local variable to be easier to understand what they are supposed to
represent.
Add a new function ompi_convertor_set_start_position which can be used to set the
current position in the convertor depending on the datatype attached to the convertor.
An improved version of convertor_init_generic which work wiith convertors comming from a cache.
Only the necessary field get modified.
A lot more cleanups ...
This commit was SVN r5950.