|
From: <mm...@us...> - 2012-11-23 21:39:24
|
Revision: 3296
http://dmcs.svn.sourceforge.net/dmcs/?rev=3296&view=rev
Author: mmsc
Date: 2012-11-23 21:39:18 +0000 (Fri, 23 Nov 2012)
Log Message:
-----------
Fix neighbor offset initialization.
Modified Paths:
--------------
dmcs/branches/dmcs1.5/include/mcs/NormalContext.h
dmcs/branches/dmcs1.5/include/network/NewConcurrentMessageDispatcher.tcc
dmcs/branches/dmcs1.5/src/generator/new_staticGen.cpp
dmcs/branches/dmcs1.5/src/mcs/NormalContext.cpp
dmcs/branches/dmcs1.5/src/network/NewServer.cpp
dmcs/branches/dmcs1.5/src/network/NewThreadFactory.cpp
dmcs/branches/dmcs1.5/src/new_dmcsd.cpp
Modified: dmcs/branches/dmcs1.5/include/mcs/NormalContext.h
===================================================================
--- dmcs/branches/dmcs1.5/include/mcs/NormalContext.h 2012-11-21 20:21:09 UTC (rev 3295)
+++ dmcs/branches/dmcs1.5/include/mcs/NormalContext.h 2012-11-23 21:39:18 UTC (rev 3296)
@@ -80,6 +80,9 @@
init();
bool
+ must_guess(NewBeliefState* input);
+
+ bool
process_input(NewBeliefState* input,
std::size_t parent_qid,
EvaluatorPtr eval,
Modified: dmcs/branches/dmcs1.5/include/network/NewConcurrentMessageDispatcher.tcc
===================================================================
--- dmcs/branches/dmcs1.5/include/network/NewConcurrentMessageDispatcher.tcc 2012-11-21 20:21:09 UTC (rev 3295)
+++ dmcs/branches/dmcs1.5/include/network/NewConcurrentMessageDispatcher.tcc 2012-11-23 21:39:18 UTC (rev 3296)
@@ -30,6 +30,8 @@
#ifndef NEW_CONCURRENT_MESSAGE_DISPATCHER_TCC
#define NEW_CONCURRENT_MESSAGE_DISPATCHER_TCC
+#include "mcs/Logger.h"
+
namespace dmcs {
template<typename MessageType>
@@ -37,6 +39,7 @@
NewConcurrentMessageDispatcher::send(MQIDs id, MessageType* mess, int msecs)
{
assert (id < SEPARATOR);
+ DBGLOG(DBG, "NewConcurrentMessageDispatcher::send(" << id << ")");
ConcurrentMessageQueuePtr cmq = getMQ(id);
return send(cmq.get(), mess, msecs);
}
@@ -49,6 +52,7 @@
MessageType* mess, int msecs)
{
assert (SEPARATOR < type && type < END_OF_MQ);
+ DBGLOG(DBG, "NewConcurrentMessageDispatcher::send(" << type << ", " << id << ")");
ConcurrentMessageQueuePtr cmq = getMQ(type, id);
return send(cmq.get(), mess, msecs);
}
@@ -87,6 +91,7 @@
NewConcurrentMessageDispatcher::receive(MQIDs id, int msecs)
{
assert (id < SEPARATOR);
+ DBGLOG(DBG, "NewConcurrentMessageDispatcher::receive(" << id << ")");
ConcurrentMessageQueuePtr cmq = getMQ(id);
return receive<MessageType>(cmq.get(), msecs);
}
@@ -98,6 +103,7 @@
NewConcurrentMessageDispatcher::receive(MQIDs type, std::size_t id, int msecs)
{
assert (SEPARATOR < type && type < END_OF_MQ);
+ DBGLOG(DBG, "NewConcurrentMessageDispatcher::receive(" << type << ", " << id << ")");
ConcurrentMessageQueuePtr cmq = getMQ(type, id);
return receive<MessageType>(cmq.get(), msecs);
}
Modified: dmcs/branches/dmcs1.5/src/generator/new_staticGen.cpp
===================================================================
--- dmcs/branches/dmcs1.5/src/generator/new_staticGen.cpp 2012-11-21 20:21:09 UTC (rev 3295)
+++ dmcs/branches/dmcs1.5/src/generator/new_staticGen.cpp 2012-11-23 21:39:18 UTC (rev 3296)
@@ -498,7 +498,10 @@
}
// then adjust to get optimal local interface
- opt_topo_gen->create_opt_interface();
+ if (topology_type != BINARY_TREE_TOPOLOGY)
+ {
+ opt_topo_gen->create_opt_interface();
+ }
//#ifdef DEBUG
DBGLOG(DBG, "Optimal local interface:");
@@ -685,7 +688,7 @@
file_client_qp.close();
// context specific query plans #############################################################################
- for (std::size_t i = 0; i < no_contexts; ++i)
+ for (int i = no_contexts-1; i >= 0; --i)
{
std::stringstream str_i;
str_i << i;
@@ -736,7 +739,7 @@
for (std::size_t j = 0; j < starting_offset[1]; ++j)
bs->set(j);
- for (LocalInterfaceMap::const_iterator it = opt_lcim->begin(); it != opt_lcim->end(); ++it)
+ for (LocalInterfaceMap::const_iterator it = lcim->begin(); it != lcim->end(); ++it)
{
ContextPair cp = it->first;
if (cp.first == 0)
@@ -1212,7 +1215,7 @@
print_command_lines();
if (topology_type != RANDOM_TOPOLOGY && topology_type != DIAMOND_ARBITRARY_TOPOLOGY &&
- topology_type != RING_EDGE_TOPOLOGY && topology_type != BINARY_TREE_TOPOLOGY)
+ topology_type != RING_EDGE_TOPOLOGY)
{
generate_opt_topology();
write_plans(true);
Modified: dmcs/branches/dmcs1.5/src/mcs/NormalContext.cpp
===================================================================
--- dmcs/branches/dmcs1.5/src/mcs/NormalContext.cpp 2012-11-21 20:21:09 UTC (rev 3295)
+++ dmcs/branches/dmcs1.5/src/mcs/NormalContext.cpp 2012-11-23 21:39:18 UTC (rev 3296)
@@ -212,7 +212,30 @@
}
+bool
+NormalContext::must_guess(NewBeliefState* input)
+{
+ if (total_guessing_input == NULL)
+ return false;
+ // if for one of the guessing neighbor, the epsilon bit is OFF then we also have to guess
+ //
+ ///@todo: can be made more efficient by determining neighbors that needs guess
+ for (NewNeighborVec::const_iterator it = guessing_neighbors->begin(); it != guessing_neighbors->end(); ++it)
+ {
+ NewNeighborPtr neighbor = *it;
+ std::size_t neighbor_id = neighbor->neighbor_id;
+
+ if (input->isEpsilon(neighbor_id, BeliefStateOffset::instance()->getStartingOffsets()))
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
bool
NormalContext::process_input(NewBeliefState* input,
std::size_t parent_qid,
@@ -221,7 +244,7 @@
std::size_t& k1,
std::size_t& k2)
{
- if (total_guessing_input != NULL)
+ if (must_guess(input))
{
NewBeliefState* current_guess = new NewBeliefState(BeliefStateOffset::instance()->NO_BLOCKS(),
BeliefStateOffset::instance()->SIZE_BS());
Modified: dmcs/branches/dmcs1.5/src/network/NewServer.cpp
===================================================================
--- dmcs/branches/dmcs1.5/src/network/NewServer.cpp 2012-11-21 20:21:09 UTC (rev 3295)
+++ dmcs/branches/dmcs1.5/src/network/NewServer.cpp 2012-11-23 21:39:18 UTC (rev 3296)
@@ -285,18 +285,22 @@
reg->joiner_dispatcher = NewJoinerDispatcherPtr(new NewJoinerDispatcher);
}
+ DBGLOG(DBG, "NewServer::initialize(): create main threads.");
thread_factory->createMainThreads(reg->message_dispatcher,
reg->request_dispatcher,
reg->output_dispatcher,
reg->joiner_dispatcher);
+ DBGLOG(DBG, "NewServer::initialize(): create context threads.");
thread_factory->createContextThreads(reg->contexts,
reg->message_dispatcher,
reg->request_dispatcher,
reg->joiner_dispatcher);
+ DBGLOG(DBG, "NewServer::initialize(): second initialization phase DONE.");
}
+
void
NewServer::handle_accept(const boost::system::error_code& e,
connection_ptr conn)
Modified: dmcs/branches/dmcs1.5/src/network/NewThreadFactory.cpp
===================================================================
--- dmcs/branches/dmcs1.5/src/network/NewThreadFactory.cpp 2012-11-21 20:21:09 UTC (rev 3295)
+++ dmcs/branches/dmcs1.5/src/network/NewThreadFactory.cpp 2012-11-23 21:39:18 UTC (rev 3296)
@@ -136,6 +136,7 @@
for (NewNeighborVec::const_iterator it = neighbors->begin();
it != neighbors->end(); ++it)
{
+ DBGLOG(DBG, "NewThreadFactory::createNeighborThreads: neighbor = " << **it);
NewNeighborThreadPtr neighbor(new NewNeighborThread(*it));
NewNeighborThreadWrapper neighbor_wrapper;
boost::thread* neighbor_thread = new boost::thread(neighbor_wrapper, neighbor, md);
Modified: dmcs/branches/dmcs1.5/src/new_dmcsd.cpp
===================================================================
--- dmcs/branches/dmcs1.5/src/new_dmcsd.cpp 2012-11-21 20:21:09 UTC (rev 3295)
+++ dmcs/branches/dmcs1.5/src/new_dmcsd.cpp 2012-11-23 21:39:18 UTC (rev 3296)
@@ -130,7 +130,6 @@
ReturnPlanMapPtr return_plan = ReturnPlanParser::parseFile(filename_return_plan);
- std::cerr << filename_opt_query_plan << std::endl;
ContextQueryPlanMapPtr opt_queryplan_map = ContextQueryPlanMapPtr();
if (filename_opt_query_plan != "")
{
@@ -180,6 +179,22 @@
}
}
}
+
+ // reassign neighbors' offsets
+ std::size_t new_neighbor_offset = 0;
+ for (NewNeighborVec::iterator it = physical_neighbors->begin(); it != physical_neighbors->end(); ++it)
+ {
+ NewNeighborPtr neighbor = *it;
+ neighbor->neighbor_offset = new_neighbor_offset;
+ new_neighbor_offset++;
+ }
+
+ for (NewNeighborVec::iterator it = guessing_neighbors->begin(); it != guessing_neighbors->end(); ++it)
+ {
+ NewNeighborPtr neighbor = *it;
+ neighbor->neighbor_offset = new_neighbor_offset;
+ new_neighbor_offset++;
+ }
}
else
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|