Re: a strange problem when openmp with glib ghash



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. 
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


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