- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
1)Can OpenMP be used with Win32 API calls within, say, a simple "for" loop?
Example:
#pragma omp parallel for
for(...)
win32_api (i.e. OpenProcess);
2)I have separate threads calling the same Win32 APIs (i.e. OpenProcess). Is this thread-safe?
Thanks!
Example:
#pragma omp parallel for
for(...)
win32_api (i.e. OpenProcess);
2)I have separate threads calling the same Win32 APIs (i.e. OpenProcess). Is this thread-safe?
Thanks!
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Spawn -
On Windows, the Intel OpenMP implementation is built on the Windows APIs, so use of other Win32 API functions should work. However, if you have a specific failure that you are experiencing, please report the problem to Intel through Premier Support.
Since OpenMP is designed for "synchronous" compute-bound computations, it may not be appropriate to use Windows threading functions within OpenMP parallel regions. Interactions of OpenMP synchronization points and blocking API calls could adversely affect performance.
As for your second question, if an API call can be used within a (Win32) threaded code, there should be no problems with using that call within an OpenMP parallel region. I expect documentation from Microsoft(?) would be able to give more specific details of thread safety for Windows API functions.
Besides thread safety, you need to consider algorithmic safety when calling API functions from OpenMP threads. Do you mean to have each thread call the function (i.e., every thread opens a different output file) or should only one thread be calling the routine (i.e. TerminateProcess). If the latter is the case, you should put the API calls in a master or single region within the parallel region.
Just to satisfy my curiosity, can you tell us what sort of application you are using this combination of APIs?
-- clay
On Windows, the Intel OpenMP implementation is built on the Windows APIs, so use of other Win32 API functions should work. However, if you have a specific failure that you are experiencing, please report the problem to Intel through Premier Support.
Since OpenMP is designed for "synchronous" compute-bound computations, it may not be appropriate to use Windows threading functions within OpenMP parallel regions. Interactions of OpenMP synchronization points and blocking API calls could adversely affect performance.
As for your second question, if an API call can be used within a (Win32) threaded code, there should be no problems with using that call within an OpenMP parallel region. I expect documentation from Microsoft(?) would be able to give more specific details of thread safety for Windows API functions.
Besides thread safety, you need to consider algorithmic safety when calling API functions from OpenMP threads. Do you mean to have each thread call the function (i.e., every thread opens a different output file) or should only one thread be calling the routine (i.e. TerminateProcess). If the latter is the case, you should put the API calls in a master or single region within the parallel region.
Just to satisfy my curiosity, can you tell us what sort of application you are using this combination of APIs?
-- clay
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page