K-ballo changed the topic of #ste||ar to: STE||AR: Systems Technology, Emergent Parallelism, and Algorithm Research | stellar.cct.lsu.edu | HPX: A cure for performance impaired parallel applications | github.com/STEllAR-GROUP/hpx | Buildbot: http://rostam.cct.lsu.edu/ | Log: http://irclog.cct.lsu.edu/
bita has joined #ste||ar
<hkaiser>
gnikunj[m]: I always said that the book was old and probably a bit outdated, but it's still the best resource to understand the inner workings of meta programming
<gnikunj[m]>
hkaiser: and you are totally right. It's just that I slacked off and didn't know mp11 existed :D
<gnikunj[m]>
the more I'm learning about boost libraries, the more interesting it's getting. Historically, I only knew of boost functions that hpx relied on. But there's a lot more to boost than that.
<hkaiser>
gnikunj[m]: btw, the main problem I have with spirit v2 is that it doesn't support move semantics for the attributes (as it predates C++11)
<gnikunj[m]>
does it create any issues?
<hkaiser>
well, all attributes are copied when being propagated up through a parser hierarchy
akheir has quit [Quit: Leaving]
<zao>
Spirit X3 is fun, especially when the parser compiles but doesn't do what it should to your data.
<zao>
(std::ref is always good, btw :D )
<gnikunj[m]>
lol I wouldn't want that to happen with my code
<zao>
Reminds me of trying to use Parsec in Haskell with those weirdo Applicative operators that silently just skipped some of the parse.
<K-ballo>
a very limited subset of Qi/X3 is actually mostly fine, the non magical stuff at least
bita has quit [Ping timeout: 256 seconds]
hkaiser has quit [Quit: bye]
bita has joined #ste||ar
bita has quit [Ping timeout: 246 seconds]
LiliumAtratum has joined #ste||ar
<LiliumAtratum>
ms[m], to answer your question from yesterday - I have worker threads + an OS thread (for rendering) accessing the same registry to fetch data, but these need to be performed under a RW-lock. I use `hpx::this_thread::get_id()` for debugging purposes to understand who holds the current locks.
<ms[m]>
LiliumAtratum: all right
<LiliumAtratum>
Today I have a slightly different question - do I have a guarantee that each `hpx::async` (invoked without main pool executor) will spawn a new task with a unique `hpx::this_thread::get_id()`? Or should I use a different function for a task, and the `hpx::this_thread::get_id()` just gives me a worker thread id?
<LiliumAtratum>
(I mean "... different function for a task ID")
<ms[m]>
the id will be unique among the tasks that are currently "active" (i.e. created, suspended, running, etc.) but the id's are reused for future tasks once a task is done
<LiliumAtratum>
ah, ok, that should be fine. Task that has ended should never keep any RW locks.
<ms[m]>
just an idea for the previous problem, would `std::this_thread::get_id` be enough for you? typically locks (hpx or any other locks) shouldn't be held across task suspension so those ids would tell you something about different tasks taking a lock (but of course you won't be able to distinguish different tasks taking taking a lock on the same worker thread... which you're not guaranteed to be able to do with
<ms[m]>
`hpx::this_thread::get_id` either because of the reuse of ids)
<LiliumAtratum>
Taking the same lock twice on the same worker or taking no lock on the worker that tries to access the registry - that is something that should not happen. However, in debug mode I want to detect those scenarios and throw an appropriate std::logic_error exception. That is what I use the get_id for.
<LiliumAtratum>
However, at the moment sometimes I get the said exception on a newly spawned hpx::async thread and trying to figure out the possible cause.
LiliumAtratum has quit [Remote host closed the connection]
<mdiers[m]>
I have a small problem during the termination of my program. I'm loading a shared lib with hpx dependencies at runtime, but I don't perform any hpx functionality. after unload i get a crash when exiting the program. the problem is because i didn't link my main executable against hpx, because i don't use it in that case. maybe someone recognizes the object and can tell me how to get it initialized? the stack is here: