Hi Ismail!
My study mainly focuses on integration of transactional memory support into data-flow extension of OpenMP that is aiming increased expressiveness and performance while preserving the paradigms' properties.
I am really happy to see people working with transactional memory. I will try to follow your work.
My project combines development and research components and can be decomposed into 5 phases. 1. Study the compatibility of the transactional memory and OpenMP constructs in the transmem development branch of GCC and propose solutions to the possible technical difficulties.
In the Velox project, one application named QuakeTM was using TM and OpenMP without problem but I know that the OpenMP was not used extensively. So probably you will find some problems.
2. Study the desgin and implementation of both data-flow (streaming) and transmem branches of GCC, interacting with their maintainers.
I am not a maintainer (not yet at least) of the trans-mem branch but I know quite well TM and some part of implementation details in gcc. So if you post questions, I will try to answer them.
Note : Just an example code from LeeTM for compatibility research of OpenMP and trans-mem . #define MEMSET _ITM_memsetW #define MEMCPY _ITM_memcpyRtWt #define BEGIN_TRANSACTION \ _ITM_beginTransaction (pr_instrumentedCode | pr_hasNoIrrevocable\ | pr_hasNoAbort) #define END_TRANSACTION \ _ITM_commitTransaction ()
Why did you use explicit calls to _ITM_* functions? why not using the __transaction semantic?
// transaction body lee->layNextTrack(track, targ->private_buffer);
Did you transactify accesses in this function? or does it use only MEMSET and MEMCPY? (I have tried LeeTM only one time and I can't remember implementation details.)
There is not a big performance difference between our approach (OpenMP + trans-mem) and (pthreads + tinySTM).
Interesting. Actually I am one of the developers of TinySTM and I am quite interested to see exact results.
Good luck and feel free to ask questions. Patrick Marlier.