sorry, please go ahead Sun 2010/9/19 Jiangzhou HE <hejiangz...@gmail.com>: > Can I check in the patch now? Thanks. > > 2010/9/2 Jiangzhou HE <hejiangz...@gmail.com> >> >> I'm sorry, there is a minor problem in the patch which I submitted five >> hours ago: Verify_No_MP() should be called for the body of a function, not >> the whole function entry, since some other kids of a function entry may >> contain OpenMP related pragmas after lowering. I have changed that and >> tested that carefully. >> >> Thanks. >> >> Jiangzhou >> >> 2010/9/2 Jiangzhou HE <hejiangz...@gmail.com> >>> >>> OK. I have added the verifier at lower_entry() and >>> Process_Parallel_Region(), which will cover the whole program. I have >>> attached the new patch. >>> >>> Thanks. >>> >>> Jiangzhou >>> >>> 2010/9/1 Sun Chan <sun.c...@gmail.com> >>>> >>>> I suggest you include verification somewhere in your fix. >>>> Sun >>>> >>>> 2010/9/1 Jiangzhou HE <hejiangz...@gmail.com>: >>>> > Hi, Sun, >>>> > >>>> > Let me state that more clearly. >>>> > >>>> > Currently, lower_mp() uses the verifier to make sure there is no >>>> > OpenMP >>>> > directive after lower_mp() returns (the verifier runs by the >>>> > destructor). >>>> > However, for an OpenMP directive with nested OpenMP directive inside, >>>> > the >>>> > nested OpenMP directive will remain after the outer directive is >>>> > lowered by >>>> > lower_mp(). The verifier will stop the compiler in that case. That is >>>> > the >>>> > bug. >>>> > >>>> > There are two ways to fix the bug. One way is to add new code in >>>> > lower_mp() >>>> > to call itself recursively, so nested OpenMP directives can also be >>>> > lowered >>>> > before the verifier runs. The other solution is to allow the lowered >>>> > code of >>>> > lower_mp() contains OpenMP directives (lower_mp() will be called again >>>> > by >>>> > lower_block(), so finally nested OpenMP directives will also be >>>> > lowered), so >>>> > we need to remove the verifier for lower_mp() (maybe add the same >>>> > verifier >>>> > in some upstream function). >>>> > >>>> > My argument is that it is not appropriate to call lower_mp() itself >>>> > recursively, so the second solution is better. >>>> > >>>> > Thanks. >>>> > >>>> > Jiangzhou >>>> > >>>> > >>>> > 2010/9/1 Sun Chan <sun.c...@gmail.com> >>>> >> >>>> >> Sorry, I am not familiar with openMP code, but your arguments doesn't >>>> >> seem to relate to the verifier. You are saying verifier will call >>>> >> lower_mp(), causing that to be recursive? >>>> >> Sun >>>> >> >>>> >> 2010/9/1 Jiangzhou HE <hejiangz...@gmail.com>: >>>> >> > Hi, Jianxin, >>>> >> > >>>> >> > I think there are two reasons why the verifier should be removed >>>> >> > from >>>> >> > lower_mp(). >>>> >> > >>>> >> > 1. lower_mp() cannot be called recursively because it uses many >>>> >> > global >>>> >> > variables. Many other functions in that file, which is called by >>>> >> > lower_mp(), >>>> >> > also used these global variables. It is not safe to call lower_mp() >>>> >> > recursively. At least, calling lower_mp() recursively is not >>>> >> > elegant for >>>> >> > such a function which depends on so many global variables. >>>> >> > >>>> >> > 2. If there is no verifier for lower_mp(), lower_block() will call >>>> >> > lower_mp() until all OpenMP directives are lowered. I think that is >>>> >> > the >>>> >> > most >>>> >> > natural way to solve the problem (only a verifier removed, no >>>> >> > concrete >>>> >> > code >>>> >> > changed). If we solve the problem by calling lower_mp() >>>> >> > recursively, >>>> >> > lower_block() will do extra work during OMP lowering. >>>> >> > >>>> >> > How about remove the verifier in lower_mp(), and calling it in some >>>> >> > upstream >>>> >> > function, such as lower_entry()? >>>> >> > >>>> >> > Thanks. >>>> >> > >>>> >> > Jiangzhou >>>> >> > >>>> >> > >>>> >> > 2010/9/1 Jian-Xin Lai <laij...@gmail.com> >>>> >> >> >>>> >> >> I have a question about the item #4 about the Verify_MP_Lowered. I >>>> >> >> don't >>>> >> >> think it's a good fix to remove the verifier. The root issue is >>>> >> >> there >>>> >> >> is >>>> >> >> only one verifier and the pointer is passed so that it can not be >>>> >> >> used >>>> >> >> recursively. >>>> >> >> >>>> >> >> 2010/8/31 Jiangzhou HE <hejiangz...@gmail.com> >>>> >> >>> >>>> >> >>> Hi, all, >>>> >> >>> >>>> >> >>> This is the fixes for several OpenMP bugs. Could gatekeeper help >>>> >> >>> to >>>> >> >>> review it? I attached the test case for the fix. >>>> >> >>> >>>> >> >>> I have fixed the following bugs: >>>> >> >>> >>>> >> >>> 1. bug of driver (see test_has_openmp.c) >>>> >> >>> The case works with -mp but fails with -fopenmp. Since the >>>> >> >>> command >>>> >> >>> line options should be compatible with gcc, -fopenmp should also >>>> >> >>> work. >>>> >> >>> I fixed this bug by change osprey/driver/OPTION. >>>> >> >>> >>>> >> >>> 2. bug of atomic directive (see test_atomic.c) >>>> >> >>> Atomic directive did not work correctly sometimes. >>>> >> >>> Without this fix, atomic directive was lowered to >>>> >> >>> INTRN_COMPARE_AND_SWAP_XX. The lowered code checks whether its >>>> >> >>> result >>>> >> >>> is >>>> >> >>> non-zero, to decide whether to try again. So >>>> >> >>> INTRN_COMPARE_AND_SWAP_XX >>>> >> >>> should be replaced by INTRN_BOOL_COMPARE_AND_SWAP in the lowered >>>> >> >>> code. >>>> >> >>> The change for omp_lower.cxx is for this bug. >>>> >> >>> >>>> >> >>> 3. bug of variable declared in nested block (see >>>> >> >>> test_local_var.c) >>>> >> >>> >>>> >> >>> For code like this: >>>> >> >>> >>>> >> >>> int s; >>>> >> >>> #pragma parallel >>>> >> >>> { >>>> >> >>> int t; >>>> >> >>> .... >>>> >> >>> } >>>> >> >>> >>>> >> >>> In the parallel region, the variable s should be shared by >>>> >> >>> default, >>>> >> >>> and the variable t should be private. However, in WHIRL, all the >>>> >> >>> local >>>> >> >>> variables are put in the symbol table of current function, so the >>>> >> >>> declaring >>>> >> >>> block for local variables such as s and t cannot be >>>> >> >>> distinguished. >>>> >> >>> Therefore, in the backend, both s and t are treated as shared >>>> >> >>> variable, >>>> >> >>> which is not correct. >>>> >> >>> I fixed this bug by adding some code in wgen. By this fix, >>>> >> >>> wgen >>>> >> >>> will >>>> >> >>> insert an explicit private pragma for local variables such as t. >>>> >> >>> >>>> >> >>> 4. bug of nested OpenMP directives (see test_nested_critical.c) >>>> >> >>> >>>> >> >>> Some OpenMP directives, like critical, master, can be nested >>>> >> >>> with >>>> >> >>> each >>>> >> >>> other. >>>> >> >>> >>>> >> >>> Most OpenMP directives are lowered by lower_mp() (in >>>> >> >>> osprey/be/com/wn_mp.cxx). lower_mp() is called by lower_block() >>>> >> >>> (in >>>> >> >>> osprey/be/com/wn_lower.cxx). lower_mp() returns the first >>>> >> >>> statement of >>>> >> >>> the >>>> >> >>> replacing block, so lower_block() will call lower_mp() again for >>>> >> >>> the >>>> >> >>> nested >>>> >> >>> directives. I believe that is the right way to deal with the >>>> >> >>> nested >>>> >> >>> OpenMP >>>> >> >>> directives ( another way may be run lower_mp() recursively, >>>> >> >>> however, >>>> >> >>> since >>>> >> >>> lower_mp() uses many global variables, I think it was not >>>> >> >>> designed to >>>> >> >>> be >>>> >> >>> called recursively). >>>> >> >>> >>>> >> >>> However, there is a class Verify_MP_Lowered in wn_mp.cxx to >>>> >> >>> check >>>> >> >>> whether all the generated code in lower_mp() has not OpenMP >>>> >> >>> directives. >>>> >> >>> Since for nested OpenMP directives, the generated code in the >>>> >> >>> first >>>> >> >>> invocation of lower_mp() would certainly contain OpenMP >>>> >> >>> directives >>>> >> >>> (which >>>> >> >>> will be lowered in the next invocation of lower_mp()), I think we >>>> >> >>> should >>>> >> >>> remove that verifier here. Most changes of wn_mp.cxx is for that. >>>> >> >>> >>>> >> >>> >>>> >> >>> After applying the fixes, all the cases work. >>>> >> >>> >>>> >> >>> Thanks. >>>> >> >>> >>>> >> >>> Regards, >>>> >> >>> Jiangzhou >>>> >> >>> >>>> >> >>> -- >>>> >> >>> Jiangzhou HE (何江舟) >>>> >> >>> >>>> >> >>> Institute of High-Performance Computing >>>> >> >>> Department of Computer Science and Technology >>>> >> >>> Tsinghua University, Beijing, China >>>> >> >>> >>>> >> >>> >>>> >> >>> >>>> >> >>> >>>> >> >>> >>>> >> >>> ------------------------------------------------------------------------------ >>>> >> >>> This SF.net Dev2Dev email is sponsored by: >>>> >> >>> >>>> >> >>> Show off your parallel programming skills. >>>> >> >>> Enter the Intel(R) Threading Challenge 2010. >>>> >> >>> http://p.sf.net/sfu/intel-thread-sfd >>>> >> >>> _______________________________________________ >>>> >> >>> Open64-devel mailing list >>>> >> >>> Open64-devel@lists.sourceforge.net >>>> >> >>> https://lists.sourceforge.net/lists/listinfo/open64-devel >>>> >> >>> >>>> >> >> >>>> >> >> >>>> >> >> >>>> >> >> -- >>>> >> >> Regards, >>>> >> >> Lai Jian-Xin >>>> >> > >>>> >> > >>>> >> > >>>> >> > -- >>>> >> > Jiangzhou HE (何江舟) >>>> >> > >>>> >> > Institute of High-Performance Computing >>>> >> > Department of Computer Science and Technology >>>> >> > Tsinghua University, Beijing, China >>>> >> > >>>> >> > >>>> >> > >>>> >> > >>>> >> > ------------------------------------------------------------------------------ >>>> >> > This SF.net Dev2Dev email is sponsored by: >>>> >> > >>>> >> > Show off your parallel programming skills. >>>> >> > Enter the Intel(R) Threading Challenge 2010. >>>> >> > http://p.sf.net/sfu/intel-thread-sfd >>>> >> > _______________________________________________ >>>> >> > Open64-devel mailing list >>>> >> > Open64-devel@lists.sourceforge.net >>>> >> > https://lists.sourceforge.net/lists/listinfo/open64-devel >>>> >> > >>>> >> > >>>> > >>>> > >>>> > >>>> > -- >>>> > Jiangzhou HE (何江舟) >>>> > >>>> > Institute of High-Performance Computing >>>> > Department of Computer Science and Technology >>>> > Tsinghua University, Beijing, China >>>> > >>>> > >>> >>> >>> >>> -- >>> Jiangzhou HE (何江舟) >>> >>> Institute of High-Performance Computing >>> Department of Computer Science and Technology >>> Tsinghua University, Beijing, China >>> >> >> >> >> -- >> Jiangzhou HE (何江舟) >> >> Institute of High-Performance Computing >> Department of Computer Science and Technology >> Tsinghua University, Beijing, China >> > > > > -- > Jiangzhou HE (何江舟) > > Institute of High-Performance Computing > Department of Computer Science and Technology > Tsinghua University, Beijing, China > > > ------------------------------------------------------------------------------ > Start uncovering the many advantages of virtual appliances > and start using them to simplify application deployment and > accelerate your shift to cloud computing. > http://p.sf.net/sfu/novell-sfdev2dev > _______________________________________________ > Open64-devel mailing list > Open64-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/open64-devel > >
------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel