78 #ifdef HPCTOOLKIT_PROFILE 100 COMM_WORLD.Bcast(&Message,
sizeof(Message), MPI_PACKED,
101 MPICommunication::SOCKET_SERVER);
102 #ifdef HPCTOOLKIT_PROFILE 120 int linesSent = getData(&Message);
123 nodeFinishedMsg.
done.
rankID = COMM_WORLD.Get_rank();
126 << linesSent <<
" trace lines." << endl;
128 COMM_WORLD.Send(&nodeFinishedMsg,
sizeof(nodeFinishedMsg), MPI_PACKED,
129 MPICommunication::SOCKET_SERVER, 0);
135 for (
int i = 0; i < Message.
filt.
count; ++i) {
137 COMM_WORLD.Bcast(&b,
sizeof(b), MPI_PACKED, MPICommunication::SOCKET_SERVER);
140 controller->applyFilters(f);
146 cerr <<
"Unexpected message command: " << Message.
command << endl;
149 #ifdef HPCTOOLKIT_PROFILE 160 int trueRank = COMM_WORLD.Get_rank();
161 int size = COMM_WORLD.Get_size();
167 list<MPICommunication::ResultBufferLocations*> buffers;
171 int rank = trueRank > MPICommunication::SOCKET_SERVER ? trueRank - 1 : trueRank;
175 int mod = n % (p - 1);
176 double q = ((double) n) / (p - 1);
189 int LowerInclusiveBound = (int) (min(mod, rank) * ceil(q)
190 + (rank - min(mod, rank)) * floor(q) + gc.
processStart);
191 int UpperInclusiveBound = (int) (min(mod, rank + 1) * ceil(q)
192 + (rank + 1 - min(mod, rank + 1)) * floor(q) - 1 + gc.
processStart);
194 DEBUGCOUT(1) <<
"Rank " << trueRank <<
" is getting lines [" << LowerInclusiveBound <<
", " 195 << UpperInclusiveBound <<
"]" << endl;
208 int totalTraces = min(correspondingAttributes.
numPixelsV, n);
216 autoskip = (int)floor(rank*totalTraces/(size - 1.0));
218 DEBUGCOUT(2) <<
"Was going to autoskip " <<autoskip <<
" traces."<<endl;
220 correspondingAttributes.
lineNum = autoskip;
222 *controller->attributes = correspondingAttributes;
225 int LinesSentCount = 0;
229 assert (nextTrace !=
NULL);
232 while (nextTrace !=
NULL)
235 if ((nextTrace->
data->
rank < LowerInclusiveBound)
236 || (nextTrace->
data->
rank > UpperInclusiveBound))
238 nextTrace = controller->getNextTrace();
244 DEBUGCOUT(2) << trueRank <<
" skipped " << waitcount
245 <<
" processes before actually starting work. Autoskip was " <<autoskip<<
" and actual skip was " << controller->attributes->lineNum -1 << endl;
251 vector<TimeCPID> ActualData = *nextTrace->
data->
listCPID;
260 int entries = ActualData.size();
264 msg->
data.
endtime = ActualData[entries - 1].timestamp;
270 unsigned char* outputBuffer =
NULL;
281 for (i = 0; i < entries; i++)
283 compr->
writeInt((
int) (ActualData[i].timestamp - currentTimestamp));
284 compr->
writeInt(ActualData[i].cpid);
285 currentTimestamp = ActualData[i].timestamp;
299 char* ptrToFirstElem = (
char*)&(outputBuffer[0]);
300 char* currentPtr = ptrToFirstElem;
302 for (i = 0; i < entries; i++)
304 int deltaTimestamp = ActualData[i].timestamp - currentTimestamp;
305 ByteUtilities::writeInt(currentPtr, deltaTimestamp);
307 ByteUtilities::writeInt(currentPtr, ActualData[i].cpid);
316 locs->
headerRequest = COMM_WORLD.Isend(msg,
sizeof(*msg), MPI_PACKED,
317 MPICommunication::SOCKET_SERVER, 0);
319 locs->
bodyRequest = COMM_WORLD.Isend(outputBuffer, outputBufferLen,
320 MPI_BYTE, MPICommunication::SOCKET_SERVER, 0);
323 buffers.push_back(locs);
325 cleanSent(buffers,
false);
327 if (LinesSentCount % 100 == 0)
328 DEBUGCOUT(2) << trueRank <<
" Has sent " << LinesSentCount
329 <<
" ranks." << endl;
332 nextTrace = controller->getNextTrace();
335 cleanSent(buffers,
true);
338 return LinesSentCount;
340 void Slave::cleanSent(list<MPICommunication::ResultBufferLocations*>& buffers,
bool wait)
343 while (!buffers.empty())
345 current = buffers.front();
348 if (!wait && !okayToDelete)
return;
uint32_t verticalResolution
DataCompressionLayer * compMsg
uint32_t horizontalResolution
unsigned char * getOutputBuffer()
SpaceTimeDataController * openDbAndCreateStdc(string)
MPI::Request headerRequest
vector< TimeCPID > * listCPID
#define SIZEOF_DELTASAMPLE
filter_header_command filt
<!-- ********************************************************************--> n<!-- HPCToolkit Experiment DTD --> n<!-- Version 2.1 --> n<!-- ********************************************************************--> n<!ELEMENT HPCToolkitExperiment(Header,(SecCallPathProfile|SecFlatProfile) *)> n<!ATTLIST HPCToolkitExperiment\n version CDATA #REQUIRED > n n<!-- ******************************************************************--> n n<!-- Info/NV:flexible name-value pairs:(n) ame;(t) ype;(v) alue --> n<!ELEMENT Info(NV *)> n<!ATTLIST Info\n n CDATA #IMPLIED > n<!ELEMENT NV EMPTY > n<!ATTLIST NV\n n CDATA #REQUIRED\n t CDATA #IMPLIED\n v CDATA #REQUIRED > n n<!-- ******************************************************************--> n<!-- Header --> n<!-- ******************************************************************--> n<!ELEMENT Header(Info *)> n<!ATTLIST Header\n n CDATA #REQUIRED > n n<!-- ******************************************************************--> n<!-- Section Header --> n<!-- ******************************************************************--> n<!ELEMENT SecHeader(MetricTable?, MetricDBTable?, TraceDBTable?, LoadModuleTable?, FileTable?, ProcedureTable?, Info *)> n n<!-- MetricTable:--> n<!ELEMENT MetricTable(Metric) * > n n<!-- Metric:(i) d;(n) ame --> n<!--(v) alue-type:transient type of values --> n<!--(t) ype:persistent type of metric --> n<!-- fmt:format;show;--> n<!ELEMENT Metric(MetricFormula *, Info?)> n<!ATTLIST Metric\n i CDATA #REQUIRED\n n CDATA #REQUIRED\n es CDATA #IMPLIED\n em CDATA #IMPLIED\n ep CDATA #IMPLIED\n v(raw|final|derived-incr|derived) \"raw\\ t (inclusive|exclusive|nil) \nil\\ partner CDATA #IMPLIED\ fmt CDATA #IMPLIED\ show (1|0) \1\\ show-percent (1|0) \1> n n<!-- MetricFormula represents derived metrics: (t)ype; (frm): formula --> n<!ELEMENT MetricFormula (Info?)> n<!ATTLIST MetricFormula\ t (combine|finalize) \finalize\\ i CDATA #IMPLIED\ frm CDATA #REQUIRED> n n<!-- Metric data, used in sections: (n)ame [from Metric]; (v)alue --> n<!ELEMENT M EMPTY> n<!ATTLIST M\ n CDATA #REQUIRED\ v CDATA #REQUIRED> n n<!-- MetricDBTable: --> n<!ELEMENT MetricDBTable (MetricDB)*> n n<!-- MetricDB: (i)d; (n)ame --> n<!-- (t)ype: persistent type of metric --> n<!-- db-glob: file glob describing files in metric db --> n<!-- db-id: id within metric db --> n<!-- db-num-metrics: number of metrics in db --> n<!-- db-header-sz: size (in bytes) of a db file header --> n<!ELEMENT MetricDB EMPTY> n<!ATTLIST MetricDB\ i CDATA #REQUIRED\ n CDATA #REQUIRED\ t (inclusive|exclusive|nil) \nil\\ partner CDATA #IMPLIED\ db-glob CDATA #IMPLIED\ db-id CDATA #IMPLIED\ db-num-metrics CDATA #IMPLIED\ db-header-sz CDATA #IMPLIED> n n<!-- TraceDBTable: --> n<!ELEMENT TraceDBTable (TraceDB)> n n<!-- TraceDB: (i)d --> n<!-- db-min-time: min beginning time stamp (global) --> n<!-- db-max-time: max ending time stamp (global) --> n<!ELEMENT TraceDB EMPTY> n<!ATTLIST TraceDB\ i CDATA #REQUIRED\ db-glob CDATA #IMPLIED\ db-min-time CDATA #IMPLIED\ db-max-time CDATA #IMPLIED\ db-header-sz CDATA #IMPLIED> n n<!-- LoadModuleTable assigns a short name to a load module --> n<!ELEMENT LoadModuleTable (LoadModule)*> n n<!ELEMENT LoadModule (Info?)> n<!ATTLIST LoadModule\ i CDATA #REQUIRED\ n CDATA #REQUIRED> n n<!-- FileTable assigns a short name to a file --> n<!ELEMENT FileTable (File)*> n n<!ELEMENT File (Info?)> n<!ATTLIST File\ i CDATA #REQUIRED\ n CDATA #REQUIRED> n n<!-- ProcedureTable assigns a short name to a procedure --> n<!ELEMENT ProcedureTable (Procedure)*> n n<!-- Info/NV: flexible name-value pairs: (n)ame; (t)ype; (v)alue --> n<!-- f: family of the procedure (fake, root, ...)--> n<!ELEMENT Procedure (Info?)> n<!ATTLIST Procedure\ i CDATA #REQUIRED\ n CDATA #REQUIRED\ f CDATA #IMPLIED> n n<!-- ****************************************************************** --> n<!-- Section: Call path profile --> n<!-- ****************************************************************** --> n<!ELEMENT SecCallPathProfile (SecHeader, SecCallPathProfileData)> n<!ATTLIST SecCallPathProfile\ i CDATA #REQUIRED\ n CDATA #REQUIRED> n n<!ELEMENT SecCallPathProfileData (PF|M)*> n<!-- Procedure frame --> n<!-- (i)d: unique identifier for cross referencing --> n<!-- (s)tatic scope id --> n<!-- (n)ame: a string or an id in ProcedureTable --> n<!-- (lm) load module: a string or an id in LoadModuleTable --> n<!-- (f)ile name: a string or an id in LoadModuleTable --> n<!-- (l)ine range: \beg-end\ (inclusive range) --> n<!-- (a)lien: whether frame is alien to enclosing P --> n<!-- (str)uct: hpcstruct node id --> n<!-- (t)ype: hpcrun node type: memory access, variable declaration, ... --> n<!-- (v)ma-range-set: \{[beg-end), [beg-end)...}\ --> n<!ELEMENT PF (PF|Pr|L|C|S|M)*> n<!ATTLIST PF\ i CDATA #IMPLIED\ s CDATA #IMPLIED\ n CDATA #REQUIRED\ lm CDATA #IMPLIED\ f CDATA #IMPLIED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Procedure (static): GOAL: replace with 'P' --> n<!ELEMENT Pr (Pr|L|C|S|M)*> n<!ATTLIST Pr\ i CDATA #IMPLIED\ s CDATA #IMPLIED\ n CDATA #REQUIRED\ lm CDATA #IMPLIED\ f CDATA #IMPLIED\ l CDATA #IMPLIED\ a (1|0) \0\\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Callsite (a special StatementRange) --> n<!ELEMENT C (PF|M)*> n<!ATTLIST C\ i CDATA #IMPLIED\ s CDATA #IMPLIED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n n<!-- ****************************************************************** --> n<!-- Section: Flat profile --> n<!-- ****************************************************************** --> n<!ELEMENT SecFlatProfile (SecHeader, SecFlatProfileData)> n<!ATTLIST SecFlatProfile\ i CDATA #REQUIRED\ n CDATA #REQUIRED> n n<!ELEMENT SecFlatProfileData (LM|M)*> n<!-- Load module: (i)d; (n)ame; (v)ma-range-set --> n<!ELEMENT LM (F|P|M)*> n<!ATTLIST LM\ i CDATA #IMPLIED\ n CDATA #REQUIRED\ v CDATA #IMPLIED> n<!-- File --> n<!ELEMENT F (P|L|S|M)*> n<!ATTLIST F\ i CDATA #IMPLIED\ n CDATA #REQUIRED> n<!-- Procedure (Note 1) --> n<!ELEMENT P (P|A|L|S|C|M)*> n<!ATTLIST P\ i CDATA #IMPLIED\ n CDATA #REQUIRED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Alien (Note 1) --> n<!ELEMENT A (A|L|S|C|M)*> n<!ATTLIST A\ i CDATA #IMPLIED\ f CDATA #IMPLIED\ n CDATA #IMPLIED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Loop (Note 1,2) --> n<!ELEMENT L (A|Pr|L|S|C|M)*> n<!ATTLIST L\ i CDATA #IMPLIED\ s CDATA #IMPLIED\ l CDATA #IMPLIED\ f CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Statement (Note 2) --> n<!-- (it): trace record identifier --> n<!ELEMENT S (S|M)*> n<!ATTLIST S\ i CDATA #IMPLIED\ it CDATA #IMPLIED\ s CDATA #IMPLIED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Note 1: Contained Cs may not contain PFs --> n<!-- Note 2: The 's' attribute is not used for flat profiles --> n