Ashkay

Sorry for not replying previously – away on travel.

> So how can I start?

Well, for your benefit – and for the others who have shown some interest in the 
project …

What’s the purpose of the gsoc project? We work on HPX and come across problems 
we need to solve. For example, trying to convert some TBB software to use HPX 
instead, and find that there are some concurrent classes we don’t have drop in 
replacements for, so we make a note that when we have some time, we should look 
into it again. Unfortunately, the time to work on some of these projects never 
materializes, but there are recurring themes that come up again and again and 
the need for certain things like a concurrent vector or map become more 
pressing. When time for gsoc comes around, we remember these projects and think 
they’d be perfect for a student to spend a few months on and help out in a 
genuinely useful way.

Ideally, we want lockfree, super fast, easy to use containers and if necessary 
algorithms to go with them. It turns our writing concurrent classes like these 
isn’t a trivial job and making lockfree containers is a tough challenge even 
for experienced developers who’ve been working on thread safe code for years. 
We’ve started work on concurrent structures in the concurrent branch and in the 
verbs parcelport I made a map that allows multiple readers or a single writer 
using a spinlock for protection (links below). It’s good enough when you are 
mostly reading and occasionally writing to it. Another similar problem is an 
enumerable_thread_specific class that exists in TBB, but a simple 
implementation in HPX I made gave bad performance due to what I assume was 
false sharing due to cache problem (gist link below). I didn’t have time (yet) 
to investigate this further, but it’d be great if a student did).

Ideally someone would spend a bit of time looking on the web and finding that 
there are many many other implementations of other lockfree structures out 
there. We use boost lockfree already so the ones in there are covered. 
Unfortunately, it’s hard to find open source implementations of other classes 
that are boost license compatible (we use boost license in HPX), so we can’t 
just take some of the other code and use it – though in some cases contacting 
the author and asking if they would relicense it with a boost license works - 
the vector in the concurrent branch came from another project, but it hasn’t 
been tested fully and debugged and might have awful performance – we’d like 
someone to clean it up and finish it off.

So what we need is someone to look at the algorithms that are ‘out there’, see 
if any code exists we can use, if not write new implementations of as many 
useful classes as possible. Create tests for them, profile and benchmark them. 
Find out if the lockfree ones really are better than the lock based ones 
(assuming you use hpx spinlocks and not std::mutex based locks). Try them out 
in different example applications – look through the hpx source and see if any 
of the existing code using lockfree structures can be improved with new classes 
(the schedulers for example need to be thread safe and use queues etc and we 
can help tell you where to look).

We want a student who can write a proposal that demonstrates that he/she knows 
what they’re doing, knows where to look, and has an idea of how to test and 
benchmark the code, experiment with hpx to see if any significant performance 
improvements can be made and put together a plan that covers the gsoc period. 
We’re here to help and several of the HPX developers will be willing to steer 
you in the right direction once you get going.

Hope this helps

JB

Concurrent branch : 
https://github.com/STEllAR-GROUP/hpx/commits/concurrent_data_structures
Issue : https://github.com/STEllAR-GROUP/hpx/issues/2235
Readers/writer mutex : 
https://github.com/STEllAR-GROUP/hpx/blob/master/plugins/parcelport/verbs/readers_writers_mutex.hpp
Concurrent map : 
https://github.com/STEllAR-GROUP/hpx/blob/master/plugins/parcelport/verbs/unordered_map.hpp
TBB : 
https://www.threadingbuildingblocks.org/docs/help/reference/thread_local_storage/enumerable_thread_specific_cls.html
And https://gist.github.com/biddisco/b9a7b1a4e006e928ae1c6f4032aaff79





From: <[email protected]> on behalf of Akshay Rawat 
<[email protected]>
Reply-To: "[email protected]" <[email protected]>
Date: Wednesday, 8 March 2017 at 17:59
To: "[email protected]" <[email protected]>
Subject: [hpx-users] [gsoc17] Getting started Concurrent Data structure Support 
project

Hi All,

My name is Akshay Rawat, I'm currently pursuing my master's in computer science 
at University of Florida. This is my first time as an open source contributor 
and I look forward to doing more.

Prior to pursuing higher education I've had been a C++ developer for 2 years 
where I've had a lot of experience in using a Boost libraries and C++ STL, (to 
the point of writing wrappers on top of STL data structures to suit the usage 
of STL data structures with pointers).

I've been doing a project with a professor at my university on weather radar 
systems which involves C++ HPC and I stumbled on the same issue of not being 
able to use the STL data structures for the project (not being thread safe).

Thus I've become really interested in contributing to Concurrent Data structure 
Support project as i would really like to create thread safe versions of the 
STL containers I use very frequently. So how can I start?



with regards,
Akshay Rawat

_______________________________________________
hpx-users mailing list
[email protected]
https://mail.cct.lsu.edu/mailman/listinfo/hpx-users

Reply via email to