Issues with BGP Timers (May 2009)

From Tau Wiki
Jump to: navigation, search

We have been having a lot of trouble with the -BGPTIMERS option in TAU recently, there are numerous bugs in linking depending on the compiler and options that we are trying to work around.

First, some things that we know:

BGPTIMERS can be used statically with XLC.

Given two files. bgwtime.c

/* bgwtime.c */

#include <common/bgp_personality.h>
#include <common/bgp_personality_inlines.h>
#include <spi/kernel_interface.h>

/* return time in seconds */
double bg_wtime() {
 static double bgp_clockspeed = 0.0;

 if (bgp_clockspeed == 0.0) {
   _BGP_Personality_t mybgp;
   Kernel_GetPersonality(&mybgp, sizeof(_BGP_Personality_t));
   bgp_clockspeed = 1.0/(double)BGP_Personality_clockMHz(&mybgp);
 }
 return (_bgp_GetTimeBase() * bgp_clockspeed);
}

And main.c

/* main.c */
#include <stdio.h>

double bg_wtime(void);

int main(int argc, char **argv) {
  double t1;

  t1 = bg_wtime();
  printf("Timer = %g\n", t1);
  printf("success\n");
  return 0;
}

We can compile and run with

mpixlc_r main.c bgwtime.c -I/bgsys/drivers/ppcfloor/arch/include -o main
qsub -e xlc_static.err -o xlc_static.out -O xlc_static -A Gpaw -t 10 -n 1 ./xlc_static

However, you cannot build with -qpic=large

mpixlc_r main.c bgwtime.c -I/bgsys/drivers/ppcfloor/arch/include -o main -qpic=large

main.c:
bgwtime.c:
"/bgsys/drivers/ppcfloor/arch/include/common/bgp_ras.h", line 650.1: 1506-508 (W) Option packed for pragma align is not supported.
bgwtime.o: In function `bg_wtime':
bgwtime.c:(.text+0x102): undefined reference to `$STATIC'
bgwtime.c:(.text+0x10a): undefined reference to `CONSTANT_AREA'
bgwtime.o: In function `_bgp_Out64':
bgwtime.c:(.text+0xa3e): undefined reference to `CONSTANT_AREA'
bgwtime.c:(.text+0xa9e): undefined reference to `CONSTANT_AREA'
bgwtime.o: In function `persist_open':
bgwtime.c:(.text+0x2d9e): undefined reference to `CONSTANT_AREA'