Re: a strange problem when openmp with glib ghash
- From: Lex Trotman <elextr gmail com>
- To: Qingpeng Niu <niuqingpeng gmail com>
- Cc: gtk-list gnome org
- Subject: Re: a strange problem when openmp with glib ghash
- Date: Wed, 22 Sep 2010 12:08:54 +1000
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
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]