Works great. Thanks. - d > -----Original Message----- > From: stephane eranian [mailto:[EMAIL PROTECTED] > Sent: Monday, June 09, 2008 7:01 PM > To: Dan Terpstra > Cc: Carl Love; perfmon2-devel@lists.sourceforge.net > Subject: Re: [perfmon2] perfmon2 on Cell > > Dan, > > Done. Try it out. > > > On Mon, Jun 9, 2008 at 10:20 PM, Dan Terpstra <[EMAIL PROTECTED]> > wrote: > > Meanwhile, Stephane, can you push this single line fix into libpfm? > > It ties the cell_support.num_cnt value to this check instead of hard- > coding > > it. This gives me a workaround for PAPI until the issue is more > > fundamentally resolved. > > Thanks, > > - d > > > > diff B C:/Documents and Settings/terpstra/Local > > Settings/Temp/pfmlib_cell_1.1.1.3_21.c > > C:/papiHEAD/src/libpfm-3.y/lib/pfmlib_cell.c > > 577c577,578 > > < if (cnt != PFMLIB_CNT_FIRST && cnt > 2) { > > --- > >> // if (cnt != PFMLIB_CNT_FIRST && cnt > 2) { > >> if (cnt != PFMLIB_CNT_FIRST && cnt > cell_support.num_cnt) { > > > > > > > >> -----Original Message----- > >> From: stephane eranian [mailto:[EMAIL PROTECTED] > >> Sent: Monday, June 09, 2008 4:03 PM > >> To: Carl Love > >> Cc: Dan Terpstra; perfmon2-devel@lists.sourceforge.net > >> Subject: Re: [perfmon2] perfmon2 on Cell > >> > >> Carl, > >> > >> Concerning Tohisba, I think you should ask Takayuki Uchikawa > >> <[EMAIL PROTECTED]>. > >> > >> > >> On Mon, Jun 9, 2008 at 9:53 PM, Carl Love <[EMAIL PROTECTED]> wrote: > >> > > >> > > >> > Dan and Stephane: > >> > > >> > I looked into this a bit more. I worked on the kernel side only of > the > >> > perfmon2 for Cell. I asked someone that I know who has done some > work > >> > on the Power libpfm code. It looks like the pfm_get_num_counters() > is a > >> > libpfm call. We looked at the libpfm code a little bit for CELL. > The > >> > function returns the #define for PMU_CELL_NUM_COUNTERS which is set > to > >> > 8. > >> > > >> > I do not know who wrote the libpfm support for cell. There is a > Toshiba > >> > copyright listed at the top of the CELL libpfm page. Stephane do you > >> > know who contributed the libpfm code? > >> > > >> > The Cell kernel support implementation only supports four 32 bit > >> > counters not eight 16 bit counters. Maybe the libpfm person assumed > >> > that the kernel supported eight counters. I don't know. We need to > >> > have a discussion with the person who implemented the libpfm stuff to > >> > get to the bottom of all this. I can help explain the kernel side of > >> > things but need someone to do the user side. > >> > > >> > I went back and looked at the kernel code again. I don't remember > all > >> > of the details off the top of my head. It looks like what we did was > to > >> > define each of the eight 16 bit counters so there would be names and > all > >> > there so in the future if we did implement variable sized counters > >> > things would be there. However, in include/asm-powerpc/cell-pmu.h we > >> > actually state that there are 4 physical 32 bit registers, the code > is: > >> > > >> > /* The Cell PMU has four hardware performance counters, which can be > >> > * configured as four 32-bit counters or eight 16-bit counters. > >> > */ > >> > #define NR_PHYS_CTRS 4 > >> > #define NR_CTRS (NR_PHYS_CTRS * 2) > >> > > >> > The sizing of the various arrays and for loops are all based on > NR_CTRS. > >> > > >> > If you look in arch/powerpc/perfmon/perfmon-cell.c in function > >> > pfm_cell_write_pmc() you will see if the counter number is less then > >> > NR_CTRS, you call write_pm07_control() to do the actual write. Hence > >> > the code is only supporting writing to the first four counters. > >> > > >> > The function write_pm07() gets mapped to cbe_write_pm07_control() > which > >> > is defined in arch/powerpc/platforms/cell/pmu.c. > >> > > >> > It looks like it was left up to the call to write the control > registers > >> > to set the bit indicating that the registers are configured as 32 or > 16 > >> > bit counters. > >> > > >> > I don't remember the details but it looks like some of the kernel > code > >> > has been changed. It looks like the function > pfm_cell_get_cntr_width() > >> > is checking to determine if the pm_control register bit is set to > >> > combine two 16 bit registers into a 32 bit register. The function > >> > returns the actual size of the counters. I think this function was > >> > changed but I can't say for sure. Clearly Toshiba has made changes > to > >> > the file. > >> > > >> > Since NR_CTRS is still set to 4 for CELL, you can only use the first > >> > four counters. The size of the counters is controlled by bits 7 to > 10 > >> > (where IBM defines MSB to be bit 0) of the 32 bit pm_control > register. > >> > The mapping is bit 7 controls pm0 and pm4, bit 8 controls pm1 and > pm5, > >> > etc. If the bit is set, then pmi and pmi+4 are 16 bit counters. > >> > Otherwise the two 16 bit counters are combined into a 32 bit counter. > >> > > >> > I am assuming pfm_cell_get_event_code() is also a libpfm call. I > have > >> > not dug into the details of this code. > >> > > >> > Carl Love > >> > > >> > On Mon, 2008-06-09 at 11:23 -0400, Dan Terpstra wrote: > >> >> More... > >> >> > >> >> pfm_pmu_support_t cell_support={ > >> >> ... > >> >> .num_cnt = PMU_CELL_NUM_COUNTERS, > >> >> ... > >> >> > >> >> #define PMU_CELL_NUM_COUNTERS 8 /* total number of EvtSel/EvtCtr */ > >> >> > >> >> This again seems to imply 8 counters (PMC/PMD pairs) for Cell. > >> >> The question is still why does pfm_cell_get_event_code hardcode this > as > >> 2, > >> >> and where is the limit of 4 32 bit counters defined/enforced? > >> >> - d > >> >> > >> >> > -----Original Message----- > >> >> > From: Dan Terpstra [mailto:[EMAIL PROTECTED] > >> >> > Sent: Sunday, June 08, 2008 4:16 PM > >> >> > To: '[EMAIL PROTECTED]'; 'Carl Love' > >> >> > Cc: 'perfmon2-devel@lists.sourceforge.net' > >> >> > Subject: RE: [perfmon2] perfmon2 on Cell > >> >> > > >> >> > Guys - > >> >> > I'm perfectly happy with 4 32-bit counters. Given the options, > that's > >> the > >> >> > trade-off I would have made as well. My confusion lies in the fact > >> that > >> >> > pfm_num_counters is returning 8, and pfm_cell_get_event_code was > >> erroring > >> >> > out after (hard-coded) 2. Carl, two nodes doesn't work for me, > >> because > >> >> > each node is independent. A blade should report the same answer as > a > >> >> > Playstation. Intel Core 2 Duos don't report 10 counters because > they > >> have > >> >> > 2 cores; just 5 counters because each core is programmed > >> independently. I > >> >> > think the hard-coded 2 is a simple programming bug, but I sure > would > >> like > >> >> > some confirmation of that. > >> >> > - dan > >> >> > > >> >> > > -----Original Message----- > >> >> > > From: stephane eranian [mailto:[EMAIL PROTECTED] > >> >> > > Sent: Friday, June 06, 2008 4:54 PM > >> >> > > To: Carl Love > >> >> > > Cc: Dan Terpstra; perfmon2-devel@lists.sourceforge.net > >> >> > > Subject: Re: [perfmon2] perfmon2 on Cell > >> >> > > > >> >> > > Hello, > >> >> > > > >> >> > > > >> >> > > On Fri, Jun 6, 2008 at 9:27 PM, Carl Love <[EMAIL PROTECTED]> > wrote: > >> >> > > > Dan: > >> >> > > > > >> >> > > > Perfmon2 does not support variable sized counters. It makes > the > >> >> > > > assumption that counter size is a known, fixed size. The > >> >> > implementation > >> >> > > > >> >> > > Adding support for variable size counters is on my list of > things > >> to do > >> >> > > soon. > >> >> > > By variable it will mean that not all counters will have to have > >> the > >> >> > same > >> >> > > size > >> >> > > but that will be coded in the PMU description module. This is > not > >> going > >> >> > to > >> >> > > be totally dynamic, i.e., from one application to the other. > >> >> > > > >> >> > > > for cell was fixed to four 32 bit counters per node due to the > >> lack of > >> >> > > > support for a variable size. We did not choose to go with > eight > >> 16 > >> >> > bit > >> >> > > > counters per node because the feeling was the overhead of > having > >> to > >> >> > > > invoke the interrupt handler on a 16 bit counter would be very > >> high. > >> >> > > > Typically, a user will be measuring either cycles or > instructions > >> >> > along > >> >> > > > with another event. Causing an interrupt every 2^16 cycles > would > >> be > >> >> > > > very expensive. > >> >> > > > > >> >> > > > I would have to double code but does pfm_get_num_counters() > >> return the > >> >> > > > total number of counters in a system? On a cell system there > are > >> two > >> >> > > > nodes. Each node has a performance counter unit with four 32 > bit > >> >> > > > counters. > >> >> > > > > >> >> > > > Supporting both 16 and 32 bit counters gets very complicated. > >> >> > > > Specifically in the code for handling 64 bit virtual counters. > >> We > >> >> > > > talked about providing support at some future time but felt > there > >> were > >> >> > > > other higher priority things to do first. Also, the perfmon2 > >> >> > interface > >> >> > > > is already complex. This is one of the reason it is has not > >> gotten > >> >> > > > accepted into the kernel. We felt adding variable sized > counter > >> >> > support > >> >> > > > now would only add additional complexity that would further > >> hinder > >> >> > > > getting it accepted. So best to try and keep things simple > for > >> now, > >> >> > get > >> >> > > > it accepted then incrementally add the complexity later. > >> >> > > > > >> >> > > > Carl Love > >> >> > > > > >> >> > > > > >> >> > > > On Fri, 2008-06-06 at 15:07 -0400, Dan Terpstra wrote: > >> >> > > >> I'm working on implementing PAPI on Cell. > >> >> > > >> And I'm confused. > >> >> > > >> Can someone tell me why pfm_get_num_counters() returns 8 for > >> Cell (I > >> >> > > think > >> >> > > >> this is # of 16-bit counters?) when pfm_cell_get_event_code() > >> >> > compares > >> >> > > >> against a hard-coded limit of 2 (see below)? Could this limit > >> simply > >> >> > > have > >> >> > > >> been inappropriately inherited from another platform? > >> >> > > >> Also, how does one distinguish between using these counters > in > >> 16-bit > >> >> > > mode > >> >> > > >> vs. 32-bit mode? > >> >> > > >> - d > >> >> > > >> > >> >> > > >> static int > >> >> > > >> pfm_cell_get_event_code(unsigned int i, unsigned int cnt, int > >> *code) > >> >> > > >> { > >> >> > > >> if (cnt != PFMLIB_CNT_FIRST && cnt > 2) { > >> >> > > >> return PFMLIB_ERR_INVAL; > >> >> > > >> } > >> >> > > >> > >> >> > > >> *code = cell_pe[i].pme_code; > >> >> > > >> > >> >> > > >> return PFMLIB_SUCCESS; > >> >> > > >> } > >> >> > > >> > >> >> > > >> > >> >> > > >> ------------------------------------------------------------- > --- > >> ----- > >> >> > -- > >> >> > > -- > >> >> > > >> Check out the new SourceForge.net Marketplace. > >> >> > > >> It's the best place to buy or sell services for > >> >> > > >> just about anything Open Source. > >> >> > > >> http://sourceforge.net/services/buy/index.php > >> >> > > >> _______________________________________________ > >> >> > > >> perfmon2-devel mailing list > >> >> > > >> perfmon2-devel@lists.sourceforge.net > >> >> > > >> https://lists.sourceforge.net/lists/listinfo/perfmon2-devel > >> >> > > > > >> >> > > > > >> >> > > > -------------------------------------------------------------- > --- > >> ----- > >> >> > -- > >> >> > > - > >> >> > > > Check out the new SourceForge.net Marketplace. > >> >> > > > It's the best place to buy or sell services for > >> >> > > > just about anything Open Source. > >> >> > > > http://sourceforge.net/services/buy/index.php > >> >> > > > _______________________________________________ > >> >> > > > perfmon2-devel mailing list > >> >> > > > perfmon2-devel@lists.sourceforge.net > >> >> > > > https://lists.sourceforge.net/lists/listinfo/perfmon2-devel > >> >> > > > > >> >> > >> > > >> > > > > >
------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel