<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>MPQC: sc::ActiveMsgMemoryGrp Class Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.9 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <div class="navpath"><b>sc</b>::<a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html">ActiveMsgMemoryGrp</a> </div> </div> <div class="contents"> <h1>sc::ActiveMsgMemoryGrp Class Reference</h1><!-- doxytag: class="sc::ActiveMsgMemoryGrp" --><!-- doxytag: inherits="sc::MsgMemoryGrp" -->The <a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html" title="The ActiveMsgMemoryGrp abstract class specializes the MsgMemoryGrp class.">ActiveMsgMemoryGrp</a> abstract class specializes the <a class="el" href="classsc_1_1MsgMemoryGrp.html" title="A MsgMemoryGrp that initializes its data using a messagegrp.">MsgMemoryGrp</a> class. <a href="#_details">More...</a> <p> <code>#include <<a class="el" href="memamsg_8h_source.html">memamsg.h</a>></code> <p> <div class="dynheader"> Inheritance diagram for sc::ActiveMsgMemoryGrp:</div> <div class="dynsection"> <p><center><img src="classsc_1_1ActiveMsgMemoryGrp.png" usemap="#sc::ActiveMsgMemoryGrp_map" border="0" alt=""></center> <map name="sc::ActiveMsgMemoryGrp_map"> <area href="classsc_1_1MsgMemoryGrp.html" alt="sc::MsgMemoryGrp" shape="rect" coords="0,224,158,248"> <area href="classsc_1_1MemoryGrp.html" alt="sc::MemoryGrp" shape="rect" coords="0,168,158,192"> <area href="classsc_1_1DescribedClass.html" alt="sc::DescribedClass" shape="rect" coords="0,112,158,136"> <area href="classsc_1_1RefCount.html" alt="sc::RefCount" shape="rect" coords="0,56,158,80"> <area href="classsc_1_1Identity.html" alt="sc::Identity" shape="rect" coords="0,0,158,24"> <area href="classsc_1_1MTMPIMemoryGrp.html" alt="sc::MTMPIMemoryGrp" shape="rect" coords="0,336,158,360"> </map> </div> <p> <a href="classsc_1_1ActiveMsgMemoryGrp-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cd1dcfa193b1df01078cf55a59c7f395"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::ActiveMsgMemoryGrp" ref="cd1dcfa193b1df01078cf55a59c7f395" args="(const Ref< MessageGrp > &msg)" --> </td><td class="memItemRight" valign="bottom"><b>ActiveMsgMemoryGrp</b> (const <a class="el" href="classsc_1_1Ref.html">Ref</a>< <a class="el" href="classsc_1_1MessageGrp.html">MessageGrp</a> > &msg)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="af41f57f7a7a4daa33336965679fb050"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::ActiveMsgMemoryGrp" ref="af41f57f7a7a4daa33336965679fb050" args="(const Ref< KeyVal > &)" --> </td><td class="memItemRight" valign="bottom"><b>ActiveMsgMemoryGrp</b> (const <a class="el" href="classsc_1_1Ref.html">Ref</a>< <a class="el" href="classsc_1_1KeyVal.html">KeyVal</a> > &)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#60953da3be5901a6f90fff5a80e028b3">set_localsize</a> (size_t)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the size of locally held memory. <a href="#60953da3be5901a6f90fff5a80e028b3"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9328676b9aeda2379035f122f0b65f43"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::localdata" ref="9328676b9aeda2379035f122f0b65f43" args="()" --> void * </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#9328676b9aeda2379035f122f0b65f43">localdata</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Returns a pointer to the local data. <br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ff33de5a310bfea26ad1be53d10f87a"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::obtain_writeonly" ref="3ff33de5a310bfea26ad1be53d10f87a" args="(distsize_t offset, int size)" --> void * </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#3ff33de5a310bfea26ad1be53d10f87a">obtain_writeonly</a> (distsize_t offset, int size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This gives write access to the memory location. No locking is done. <br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#613932193268365d56eda08873cca65f">obtain_readwrite</a> (distsize_t offset, int size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Only one thread can have an unreleased obtain_readwrite at a time. <a href="#613932193268365d56eda08873cca65f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="069a32ab667dc25184d4334e645e170e"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::obtain_readonly" ref="069a32ab667dc25184d4334e645e170e" args="(distsize_t offset, int size)" --> void * </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#069a32ab667dc25184d4334e645e170e">obtain_readonly</a> (distsize_t offset, int size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This gives read access to the memory location. No locking is done. <br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cff637071563ec5acc50d7377f355662"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::release_readonly" ref="cff637071563ec5acc50d7377f355662" args="(void *data, distsize_t offset, int size)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#cff637071563ec5acc50d7377f355662">release_readonly</a> (void *data, distsize_t offset, int size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This is called when read access is no longer needed. <br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f80308b406d1a87824fa1029fc03fcb9"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::release_writeonly" ref="f80308b406d1a87824fa1029fc03fcb9" args="(void *data, distsize_t offset, int size)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#f80308b406d1a87824fa1029fc03fcb9">release_writeonly</a> (void *data, distsize_t offset, int size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This is called when write access is no longer needed. <br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#9eef3abc6db3efd9d20869c8a028237b">release_readwrite</a> (void *data, distsize_t offset, int size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This is called when read/write access is no longer needed. <a href="#9eef3abc6db3efd9d20869c8a028237b"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="85dad311cc1abe5781177a3422ed6bb6"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::sum_reduction" ref="85dad311cc1abe5781177a3422ed6bb6" args="(double *data, distsize_t doffset, int dsize)" --> void </td><td class="memItemRight" valign="bottom"><b>sum_reduction</b> (double *data, distsize_t doffset, int dsize)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8767a228771f1647790ef4ad64d9f9a6"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::sum_reduction_on_node" ref="8767a228771f1647790ef4ad64d9f9a6" args="(double *data, size_t doffset, int dsize, int node=-1)" --> void </td><td class="memItemRight" valign="bottom"><b>sum_reduction_on_node</b> (double *data, size_t doffset, int dsize, int node=-1)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d758450ad01aa01da187ad985dfc7d4"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::print" ref="0d758450ad01aa01da187ad985dfc7d4" args="(std::ostream &o=ExEnv::out0()) const " --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html#0d758450ad01aa01da187ad985dfc7d4">print</a> (std::ostream &o=ExEnv::out0()) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Prints out information about the object. <br></td></tr> <tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4a256c7d2f4d5e32db65270565056959"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::retrieve_data" ref="4a256c7d2f4d5e32db65270565056959" args="(void *, int node, int offset, int size, int lock)=0" --> virtual void </td><td class="memItemRight" valign="bottom"><b>retrieve_data</b> (void *, int node, int offset, int size, int lock)=0</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fdc545b17442266088f6e51f125c3a02"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::replace_data" ref="fdc545b17442266088f6e51f125c3a02" args="(void *, int node, int offset, int size, int unlock)=0" --> virtual void </td><td class="memItemRight" valign="bottom"><b>replace_data</b> (void *, int node, int offset, int size, int unlock)=0</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="791c81d618cd07df5aa44d163dfce8a5"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::sum_data" ref="791c81d618cd07df5aa44d163dfce8a5" args="(double *data, int node, int doffset, int dsize)=0" --> virtual void </td><td class="memItemRight" valign="bottom"><b>sum_data</b> (double *data, int node, int doffset, int dsize)=0</td></tr> <tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="73455a4bdf3c17da364e7969aa6f6f89"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::data_" ref="73455a4bdf3c17da364e7969aa6f6f89" args="" --> char * </td><td class="memItemRight" valign="bottom"><b>data_</b></td></tr> </table> <hr><a name="_details"></a><h2>Detailed Description</h2> The <a class="el" href="classsc_1_1ActiveMsgMemoryGrp.html" title="The ActiveMsgMemoryGrp abstract class specializes the MsgMemoryGrp class.">ActiveMsgMemoryGrp</a> abstract class specializes the <a class="el" href="classsc_1_1MsgMemoryGrp.html" title="A MsgMemoryGrp that initializes its data using a messagegrp.">MsgMemoryGrp</a> class. <p> It uses active messages to implement global shared memory. <hr><h2>Member Function Documentation</h2> <a class="anchor" name="613932193268365d56eda08873cca65f"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::obtain_readwrite" ref="613932193268365d56eda08873cca65f" args="(distsize_t offset, int size)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void* sc::ActiveMsgMemoryGrp::obtain_readwrite </td> <td>(</td> <td class="paramtype">distsize_t </td> <td class="paramname"> <em>offset</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>size</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Only one thread can have an unreleased obtain_readwrite at a time. <p> The actual memory region locked can be larger than that requested. If the memory region is already locked this will block. For this reason, data should be held as read/write for as short a time as possible. <p>Implements <a class="el" href="classsc_1_1MemoryGrp.html#adba96c579589e6be4ce48bd275137a0">sc::MemoryGrp</a>.</p> </div> </div><p> <a class="anchor" name="9eef3abc6db3efd9d20869c8a028237b"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::release_readwrite" ref="9eef3abc6db3efd9d20869c8a028237b" args="(void *data, distsize_t offset, int size)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void sc::ActiveMsgMemoryGrp::release_readwrite </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"> <em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">distsize_t </td> <td class="paramname"> <em>offset</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>size</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> This is called when read/write access is no longer needed. <p> The memory will be unlocked. <p>Implements <a class="el" href="classsc_1_1MemoryGrp.html#ab51f4f3cf1d7c12fe9c834e0d928eed">sc::MemoryGrp</a>.</p> </div> </div><p> <a class="anchor" name="60953da3be5901a6f90fff5a80e028b3"></a><!-- doxytag: member="sc::ActiveMsgMemoryGrp::set_localsize" ref="60953da3be5901a6f90fff5a80e028b3" args="(size_t)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void sc::ActiveMsgMemoryGrp::set_localsize </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"> </td> <td> ) </td> <td><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Set the size of locally held memory. <p> When memory is accessed using a global offset counting starts at node 0 and proceeds up to node <a class="el" href="classsc_1_1MemoryGrp.html#a2f204165147154bd15600ea8929b3c6" title="Returns how many nodes there are.">n()</a> - 1. <p>Reimplemented from <a class="el" href="classsc_1_1MsgMemoryGrp.html#902db59bfb4f13979efa58b7d9077b53">sc::MsgMemoryGrp</a>.</p> </div> </div><p> <hr>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="memamsg_8h_source.html">memamsg.h</a></ul> </div> <hr> <address> <small> Generated at Wed Oct 14 14:12:16 2009 for <a href="http://www.mpqc.org">MPQC</a> 2.3.1 using the documentation package <a href="http://www.doxygen.org">Doxygen</a> 1.5.9. </small> </address> </body> </html>