Re: a strange problem when openmp with glib ghash



As I understand it, but thats a question for the omp mailing list.

Cheers
Lex

On 22 September 2010 12:18, Qingpeng Niu <niuqingpeng gmail com> wrote:
> Thank you for quick reponse. But I am a little confused about you mentioned.
> Do you mean the following two loop has difference and i should use the A but
> not B?
> [A]
> #pragma omp parallel
>
> {
> #pragma omp for
>  for(1...100)
>
>  {
>  }
> }
> [B]
> #pragma omp parallel for
>
> for(1..100)
> {
>
> }
>
>
>
> On Tue, Sep 21, 2010 at 10:08 PM, Lex Trotman <elextr gmail com> wrote:
>>
>> On 22 September 2010 11:39, Qingpeng Niu <niuqingpeng gmail com> wrote:
>> > Hi, Lex
>> > Thank you for responding me second time.  I am touched. Sorry i forgot
>> > one
>> > line.
>> > They are not shared by each thread.
>> > There is a
>> > gh=pdt_a[i].gh;
>> > in the second parallel for.
>> > Therefore they are seperated. But  only add with g hash table it will
>> > stop
>> > there. If i comment the g hash table code in second loop, it will not
>> > stop.
>> > I think it should be some problem with glib.
>>
>> omp parallel runs the whole block in a thread, ie each thread loops
>> through all the hashes, so they are shared.  Use omp for to make each
>> loop iteration a separate thread.
>>
>> Cheers
>> Lex
>>
>> > Qingpeng Niu
>> > On Tue, Sep 21, 2010 at 6:45 PM, Lex Trotman <elextr gmail com> wrote:
>> >>
>> >> On 22 September 2010 02:31, Qingpeng Niu <niuqingpeng gmail com> wrote:
>> >> > Hi,
>> >> >
>> >> > I do a parallel open mp for which used shared data of g_hash_table.
>> >> > Program
>> >> > do fine with the first parallel for loop but the third parallel for
>> >> > loop
>> >> > program will stop there and never be entered.
>> >> > g_thread_init(NULL);
>> >> > ..............
>> >> > #pragma omp parallel for private(i) shared(pdt_a)
>> >> >         for(i=0;i<psize;i++)
>> >> >          {
>> >> >                .............
>> >> >                 pdt_a[i].gh   = g_hash_table_new(g_str_hash,
>> >> > compare_strings);
>> >> >                ............
>> >> >          }
>> >> > #pragma omp parallel for private(i)
>> >> > shared(pdt_a,pit_a,lines,psize,nbuckets)
>> >> >         for(i=0;i<psize;i++)
>> >> >         {
>> >> >                for....
>> >> >                    lookup = g_hash_table_lookup(gh, input);
>> >> >               .....................
>> >> >                     g_hash_table_insert(gh, data, p_data);
>> >> >               .....................
>> >> >                       g_hash_table_replace(gh,strdup(input),p_data);
>> >> >         }
>> >> >
>> >>
>> >> It is not clear from this code if the hash tables are shared between
>> >> threads or if each thread has its own.
>> >>
>> >> If they are shared then you need to do the locking, from Gthread
>> >> documentation : "After calling g_thread_init(), GLib is completely
>> >> thread safe (all global data is automatically locked), but individual
>> >> data structure instances are not automatically locked for performance
>> >> reasons. So, for example you must coordinate accesses to the same
>> >> GHashTable from multiple threads."
>> >>
>> >> If they are not shared then this is a question for the openmp ML not
>> >> the glib ML.
>> >>
>> >> Cheers
>> >> Lex
>> >>
>> >>
>> >> > #pragma omp parallel for private(i)   // this parallel for will not
>> >> > be
>> >> > entered. Program will stop here and halt.
>> >> >         for(i=0;i<psize;i++)
>> >> > --
>> >> > Qingpeng Niu
>> >> > Department of Computer Science and Engineering at OSU
>> >> >
>> >> > _______________________________________________
>> >> > gtk-list mailing list
>> >> > gtk-list gnome org
>> >> > http://mail.gnome.org/mailman/listinfo/gtk-list
>> >> >
>> >> >
>> >> _______________________________________________
>> >> gtk-list mailing list
>> >> gtk-list gnome org
>> >> http://mail.gnome.org/mailman/listinfo/gtk-list
>> >
>> >
>> >
>> > --
>> > Qingpeng Niu
>> > Department of Computer Science and Engineering at OSU
>> >
>
>
>
> --
> Qingpeng Niu
> Department of Computer Science and Engineering at OSU
>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]