[CHiPPS] Differencing scheme with ALPS

Khoa Vo khoa.vo at informatik.uni-heidelberg.de
Thu Feb 14 18:13:13 EST 2008


Hi Yan,

Sounds good! As time is quite critical now (I need to fix the bug, run
the test extensively and submit the results next week), can you tell me
more details how to implement so I don't have to dig into the code?
1. In particular, in the AlpsTreeNode::process() or ::branch(), how can
I get its parent node? 
2. If the parent node is located in another process (or processor after
load balancing), does ALPS layer support getting its information
transparently? That means I just call something like this->parent() and
get its parent?
3. It would be good if you can tell me some classes/functions where I
can take as samples.

Thanks,
Khoa

-----Original Message-----
From: Yan Xu [mailto:Yan.Xu at sas.com] 
Sent: Thursday, February 14, 2008 7:26 PM
To: Khoa Vo
Cc: cops at list.coin-or.org
Subject: RE: Differencing scheme with ALPS

Khoa,

The differencing is introduced at BiCePS level. However, it looks to me
that you can design your own difference scheme. Basically, at a child,
you want to store what are different with its parent and recover to a
full node description when process it next time. For instances, it is
possible that only a few of the "PNode** maPNode" of a child are
different with its parent, then you can add members like

class PartialLabeling
{
        // number of different
          int numDiff;
        // which are different
        int diffIndices;
        // Different nodes
        PNode** diffNodes;
}


At root, you can store a full description (numDiff=-1), then at children
you store difference and recover by tracing back to root or a node with
full description.


Yan




-----Original Message-----
From: Khoa Vo [mailto:khoa.vo at informatik.uni-heidelberg.de]
Sent: Wednesday, February 13, 2008 5:46 PM
To: Yan Xu
Cc: cops at list.coin-or.org
Subject: Differencing scheme with ALPS

Hi Yan,

I didn't succeed setting ALPS parameters to reduce the memory.
I think about the differencing scheme you mentioned with BICEPS and
BLIS. Is it supported in ALPS? The problem is summarized below.

1. I have a struct PNode storing status of graph nodes (not search tree
node).
struct PNode{
        int firstPos;
        int lastPos;
        int rightDistance;   // distance from the node set fixed on the
right
        int leftDistance;    // distance from the node set fixed on the
left
        char updated;
      int bestPos;         // to save an heuristic solution when found
};

2. For each search node born along the search tree, a class
PartialLabeling is created, member variable is init with an array of
node status, e.g. maPNode = new PNode[N];
class PartialLabeling
{
        //labeling
        PNode** maPNode;
}
Note that PNode status can be change at any i with 1<=i<=N, so at the
moment I have to pass all the current node status to the child node. The
child in turn has to hold all these statuses as well, because it needs
status of all graph nodes to process, but this is very expensive. So you
understand why memory is allocated so quickly.
For example, if N=100, then each node takes 100 x 11byte = 1100bytes
already, where 11byte is size of PNode.

Any hint or suggestion will be appreciated.
Thanks,
Khoa


-----Original Message-----
From: Yan Xu [mailto:Yan.Xu at sas.com]
Sent: Monday, February 11, 2008 7:36 PM
To: Khoa Vo
Cc: cops at list.coin-or.org
Subject: RE: Setting physical memory limit

Khoa,

first make sure that Alps_hubWorkClusterSizeLimit is not specified
(which means hub never works like a worker), then try to reduce
Alps_hubInitNodeNum

or

increase Alps_hubNum


I am curiously why hub generate a lots of nodes.

Yan






More information about the CHiPPS mailing list