-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BOLT tasks and ABT_cond #51
Comments
Thanks for reporting an issue! I tested in my environment and it seems that tasking logic a bug in BOLT (tasks are not parallelized). I will fix it this weekend (as well as #49). |
Thanks for looking into this. I'll be happy to give it a try as soon as you have a fix ready :) |
I tested with current master ( |
This bug was reported in pmodels#51, which has been already fixed. This test checks if this bug has been fixed. Acknowledgment: the origianl code of this test has been created by Joseph Schuchart ([email protected]). Thank you.
This bug was reported in pmodels#51, which has been already fixed. This test checks if this bug has been fixed. Acknowledgment: the original code of this test has been created by Joseph Schuchart ([email protected]). Thank you.
This bug was reported in pmodels#51, which has been already fixed. This test checks if this bug has been really fixed. Acknowledgment: the original code of this test has been created by Joseph Schuchart ([email protected]). Thank you.
Originally BOLT had a few tasking bugs, which I hope have been fixed in several PRs. I also added tests to make sure OpenMP tasks and OpenMP threads are scheduled in parallel. Thank you very much for reporting this issue! "Correct" but nonintuitive behaviorNow it works "correctly" (in my understanding); I finally found that the current BOLT design does not run your program correctly because Argobots blocking calls block OpenMP tasks. I used Clang 10.0 in the following experiments, but any recent compiler should be okay. I am not sure if an old GCC (e.g., GCC 4.x) works. First, it works as follows on my four-core laptop.
Because There is a design issue in BOLT. At present, on Argobots blocking calls (e.g., The fundamental reason is that BOLT maps both OpenMP threads and OpenMP tasks to Argobots threads (let's say ULTs). If an OpenMP task (=ULT) runs a Runtime-level solutions(I list a few options, but none of them are available now.)
User-level solutionsRegardless of the number of Argobots schedulers (which is, in the current implementation, equal to the number of Pthreads), giving enough executors (i.e., OpenMP threads) is the easiest solution.
In reality, the threading performance of BOLT is not bad, so using OpenMP threads instead of OpenMP tasks is another way. Anyway, thank you very much for giving us a very insightful question! We could find a few bugs, make scheduling tests, and realize the design issue in BOLT. |
I am trying to leverage low-level Argobots features inside BOLT tasks (BOLT 1.0rc3, built with internal Argobots). In particular, I would like to block a set of tasks on a conditional variable and unblock them eventually from a different task, like in this example:
What I see is that all tasks are created and only the first task starts executing. Output:
Any idea why only the first task is executing? Are the other runnable tasks not passed to Argobots? Do I need to set some environment variables to make this work?
The text was updated successfully, but these errors were encountered: