use of edu.iu.dsc.tws.comms.mpi.MPIBuffer in project twister2 by DSC-SPIDAL.
the class MPIMultiMessageDeserializer method build.
@Override
public Object build(Object partialObject, int edge) {
MPIMessage currentMessage = (MPIMessage) partialObject;
int readLength = 0;
int bufferIndex = 0;
List<MPIBuffer> buffers = currentMessage.getBuffers();
List<Object> returnList = new ArrayList<>();
MessageHeader header = currentMessage.getHeader();
if (header == null) {
throw new RuntimeException("Header must be built before the message");
}
// LOG.info(String.format("%d deserilizing message", executor));
while (readLength < header.getLength()) {
List<MPIBuffer> messageBuffers = new ArrayList<>();
MPIBuffer mpiBuffer = buffers.get(bufferIndex);
ByteBuffer byteBuffer = mpiBuffer.getByteBuffer();
// now read the length
int length = byteBuffer.getInt();
int tempLength = 0;
int tempBufferIndex = bufferIndex;
while (tempLength < length) {
mpiBuffer = buffers.get(tempBufferIndex);
messageBuffers.add(mpiBuffer);
tempLength += mpiBuffer.getByteBuffer().remaining();
tempBufferIndex++;
// LOG.info(String.format("%d temp %d length %d readLength %d header %d buf_pos %d",
// executor, tempLength, length, readLength, header.getLength(),
// mpiBuffer.getByteBuffer().position()));
}
Object object = buildMessage(currentMessage, messageBuffers, length);
readLength += length + 4;
if (keyed && !MessageTypeUtils.isPrimitiveType(currentMessage.getKeyType())) {
// adding 4 to the length since the key length is also kept
readLength += 4;
if (MessageTypeUtils.isMultiMessageType(currentMessage.getKeyType())) {
readLength += 4;
}
}
byteBuffer = mpiBuffer.getByteBuffer();
if (byteBuffer.remaining() > 0) {
bufferIndex = tempBufferIndex - 1;
} else {
bufferIndex = tempBufferIndex;
}
returnList.add(object);
}
return returnList;
}
use of edu.iu.dsc.tws.comms.mpi.MPIBuffer in project twister2 by DSC-SPIDAL.
the class MPIMultiMessageSerializer method build.
@Override
public Object build(Object message, Object partialBuildObject) {
int noOfMessages = 1;
if (message instanceof List) {
noOfMessages = ((List) message).size();
}
MPISendMessage sendMessage = (MPISendMessage) partialBuildObject;
// we got an already serialized message, lets just return it
MPIMessage mpiMessage = sendMessage.getMPIMessage();
if (mpiMessage.isComplete()) {
sendMessage.setSendState(MPISendMessage.SendState.SERIALIZED);
return sendMessage;
}
// to keep track of the serialization progress of this message
if (sendMessage.getSerializationState() == null) {
sendMessage.setSerializationState(new SerializeState());
}
while (sendBuffers.size() > 0 && sendMessage.serializedState() != MPISendMessage.SendState.SERIALIZED) {
MPIBuffer buffer = sendBuffers.poll();
if (sendMessage.serializedState() == MPISendMessage.SendState.INIT || sendMessage.serializedState() == MPISendMessage.SendState.SENT_INTERNALLY) {
// build the header
buildHeader(buffer, sendMessage, noOfMessages);
sendMessage.setSendState(MPISendMessage.SendState.HEADER_BUILT);
}
if (sendMessage.serializedState() == MPISendMessage.SendState.HEADER_BUILT || sendMessage.serializedState() == MPISendMessage.SendState.BODY_BUILT) {
// first we need to serialize the body if needed
serializeBody(message, sendMessage, buffer);
}
// okay we are adding this buffer
mpiMessage.addBuffer(buffer);
if (sendMessage.serializedState() == MPISendMessage.SendState.SERIALIZED) {
SerializeState state = sendMessage.getSerializationState();
int totalBytes = state.getTotalBytes();
mpiMessage.getBuffers().get(0).getByteBuffer().putInt(12, totalBytes);
MessageHeader.Builder builder = MessageHeader.newBuilder(sendMessage.getSource(), sendMessage.getEdge(), totalBytes);
builder.destination(sendMessage.getDestintationIdentifier());
sendMessage.getMPIMessage().setHeader(builder.build());
state.setTotalBytes(0);
// mark the original message as complete
mpiMessage.setComplete(true);
}
}
return sendMessage;
}
use of edu.iu.dsc.tws.comms.mpi.MPIBuffer in project twister2 by DSC-SPIDAL.
the class Test method deserialize.
private void deserialize(MPIMessage message) {
List<MPIBuffer> buffers = message.getBuffers();
for (MPIBuffer mpiBuffer : buffers) {
mpiBuffer.getByteBuffer().flip();
mpiBuffer.getByteBuffer().rewind();
}
if (message.isComplete()) {
System.out.printf("Complete message");
}
message.setKeyType(MessageType.SHORT);
MessageHeader header = mpiMultiMessageDeserializer.buildHeader(message.getBuffers().get(0), 0);
message.setHeader(header);
System.out.println(String.format("%d %d %d", header.getLength(), header.getSourceId(), header.getEdge()));
Object d = mpiMultiMessageDeserializer.build(message, 0);
List list = (List) d;
for (Object o : list) {
if (o instanceof KeyedContent) {
System.out.println(((KeyedContent) o).getSource());
if (((KeyedContent) o).getObject() instanceof IntData) {
System.out.println("Length: " + ((IntData) ((KeyedContent) o).getObject()).getData().length);
}
}
}
System.out.println("End");
}
Aggregations