OMNeT++/OMNEST Bug Tracker - OMNeT++
View Issue Details
0000193OMNeT++simulation kernelpublic2010-07-29 11:392010-07-29 11:48
andras 
andras 
normalminoralways
resolvedfixed 
4.1 
4.24.2 
0000193: Parallel simulation issues
There are several issues with parallel simulation:

1. inout gates are not supported on partition boundaries: for the input half, the system should create a proxy gate, but a normal gate is created instead. Workaround: use separate input and output gates.

2. scalar modules are not handled correctly in the partitioning description (they are erroneously handled as element [0] in a module vector). Workaround: use module vectors

3. scalar gates are not handled correctly partition boundaries. Workaround: use gate vectors

Reported by Philip C. Roth
No tags attached.
patch issue1.patch (1,575) 2010-07-29 11:47
https://dev.omnetpp.org/bugs/file_download.php?file_id=42&type=bug
patch issue2.patch (610) 2010-07-29 11:47
https://dev.omnetpp.org/bugs/file_download.php?file_id=43&type=bug
patch issue3.patch (1,444) 2010-07-29 11:48
https://dev.omnetpp.org/bugs/file_download.php?file_id=44&type=bug
Issue History
2010-07-29 11:39andrasNew Issue
2010-07-29 11:39andrasDescription Updated
2010-07-29 11:43andrasNote Added: 0000331
2010-07-29 11:47andrasFile Added: issue1.patch
2010-07-29 11:47andrasFile Added: issue2.patch
2010-07-29 11:48andrasFile Added: issue3.patch
2010-07-29 11:48andrasNote Added: 0000332
2010-07-29 11:48andrasStatusnew => resolved
2010-07-29 11:48andrasFixed in Version => 4.2
2010-07-29 11:48andrasResolutionopen => fixed
2010-07-29 11:48andrasAssigned To => andras

Notes
(0000331)
andras   
2010-07-29 11:43   
Causes of the bugs:

1. cModule::addGate() and cModule::setGateSize() called createGateObject() with type==cGate::INOUT. Only INPUT and OUTPUT are allowed values for this function.

2. cEnvir::isModuleLocal() expects index==-1 for scalar modules, and cModuleType::create() invokes it with 0.

3. The code in cParsimPartition::connectRemoteGates() in cparsimpartition.cc is the problem. For a scalar gate, the marshalling side sends a zero for gateIndex because cGate::getIndex() returns zero for a scalar gate. The unmarshalling side sees the zero and passes it into cModule::gate( name, index ) which throws the exception because the gate is not a vector. Since that function expects -1 for the gateIndex of a scalar gate, a proposed fix is to check on the sending side whether a gate is scalar or vector, and send -1 for gateIndex if it is a scalar gate
(0000332)
andras   
2010-07-29 11:48   
see attached patches.