I haven't had trouble with it crashing.  This might be because I always
put the start/stop calls in serial code, before or after any parallel
constructs but not within them.  Since parallel constructs other than
begin-stmts have implicit syncs afterward, and all the runtime tasking
layers only create threads (if they have to at all) in order to execute
parallel constructs, this means that the start/stop calls and the thread
creation calls are well separated.

That's just a hypothesis, but personally I don't recall having any
trouble with gperftools crashing.

greg


On Tue, 20 Oct 2015, Hui Zhang wrote:

Ah... sorry I missed that.
It works now , thanks !

One more question: from gperftools' README, it seems like it sometimes
crashes when threads get created, and it suggested to avoid putting
ProfilerStart and ProfilerStop among the places where new threads get
forked, but in this way, how can I profile the multi-threading feature in
Chapel ? How did you normally use it to profile a Chapel code with
forall/coforall clauses ?

Thanks !

On Tue, Oct 20, 2015 at 6:06 PM, Greg Titus <[email protected]> wrote:
      I think it's complaining about ProfilerStop(), perhaps that
      you need:
        void ProfilerStop(void);

      to make it a complete prototype by saying explicitly that it
      takes no
      arguments?

      greg


      On Tue, 20 Oct 2015, Hui Zhang wrote:

            Hello, Greg

            So I create a prof-decls.h and put these two
            lines in it:
            int ProfilerStart(const char* fname);
            void ProfilerStop();
            which I get from the gperftools/profiler.h
            chpl -g myCode.chpl prof-decls.h -I../include/ -o
            myCode -L../lib -ltest
            it reports less errors but still this one:

            In file included from /chpl__header.h:5:0,
                             from /_main.c:1:
                          ./prof-decls.h:2:1: error: function
            declaration isn’t a
            prototype [-Werror=strict-
             prototypes]

            why the ProfilerStart declaration isn't the
            function prototype ?
            Thanks


            On Tue, Oct 20, 2015 at 5:07 PM, Greg Titus
            <[email protected]> wrote:
                  Hello --

                  I believe you can solve this problem by
            putting C-style
                  declarations for
                  ProfilerStart() and ProfilerStop() in a .h
            file
                  (prof-decls.h, say) and
                  then adding that .h file to the chpl
            command line:

                    chpl -g myCode.chpl prof-decls.h
            -I../include/ -o myCode
                  -L../lib -ltest

                  (Sorry I didn't yet respond to your earlier
            message.  I
                  needed time to
                  dig into the cause of the problem, but had
            not found that
                  time yet.)

                  greg


                  On Tue, 20 Oct 2015, Hui Zhang wrote:

                        Hello,

                        I'm trying to use gperftools to
            profile the
                        Chapel code, but simply link
                        the profiler library doesn't produce
            the profile
                        file, so I need to
                        explicitly call two external C
            functions within
                        my Chapel code, here's
                        what I did:

                        1. in my chapel module:
                                extern proc
            ProfilerStart(name:
                        c_string);
                                     **it suggested me to use
            c_string
                        instead of string
                                exetern proc ProfilerStop();
                            then in proc main, I called this
            two
                        functions
                        2. recompile my chapel program:
                                 chpl -g myCode.chpl
            -I../include/ -o
                        myCode -L../lib -ltest

                        But I got this error :
                        /_main.c:30:0:
                        /Hui.c: In function ‘chpl_user_main’:
                        /Hui.c:160:1: error: implicit
            declaration of
                        function ‘ProfilerStart’

            [-Werror=implicit-function-declaration]
                        /Hui.c:160:1: error: nested extern
            declaration of
                        ‘ProfilerStart’
                        [-Werror=nested-externs]
                        /Hui.c:163:1: error: implicit
            declaration of
                        function ‘ProfilerStop’

            [-Werror=implicit-function-declaration]
                        /Hui.c:163:1: error: nested extern
            declaration of
                        ‘ProfilerStop’
                        [-Werror=nested-externs]
                        cc1: all warnings being treated as
            errors
                        make: ***

            [/tmp/chpl-hzhang86-15966.deleteme/experiment.work.funh.tmp]
                        Error 1
                        error: compiling generated source
                        [mysystem.cpp:43]

                        Should I just ignore these warnings ?
            but how to
                        disable this warning as
                        error option?
                        Or am I doing it wrong ?

                        Thanks

                        --
                        Best regards


                        Hui Zhang




            --
            Best regards


            Hui Zhang




--
Best regards


Hui Zhang

------------------------------------------------------------------------------
_______________________________________________
Chapel-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-developers

Reply via email to