[PATCH] vcomp: Implement omp_get_num_procs().

Gijs Vermeulen gijsvrm at gmail.com
Fri Jun 4 13:10:27 CDT 2021


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50041
Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
---
 dlls/vcomp/main.c        |  6 ++++--
 dlls/vcomp/tests/vcomp.c | 15 +++++++++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c
index 90caac83750..30bc2c63501 100644
--- a/dlls/vcomp/main.c
+++ b/dlls/vcomp/main.c
@@ -43,6 +43,7 @@ static DWORD   vcomp_context_tls = TLS_OUT_OF_INDEXES;
 static HMODULE vcomp_module;
 static int     vcomp_max_threads;
 static int     vcomp_num_threads;
+static int     vcomp_num_procs;
 static BOOL    vcomp_nested_fork = FALSE;
 
 static RTL_CRITICAL_SECTION vcomp_section;
@@ -1001,8 +1002,8 @@ int CDECL omp_get_nested(void)
 
 int CDECL omp_get_num_procs(void)
 {
-    TRACE("stub\n");
-    return 1;
+    TRACE("\n");
+    return vcomp_num_procs;
 }
 
 int CDECL omp_get_num_threads(void)
@@ -1843,6 +1844,7 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
             vcomp_module      = instance;
             vcomp_max_threads = sysinfo.dwNumberOfProcessors;
             vcomp_num_threads = sysinfo.dwNumberOfProcessors;
+            vcomp_num_procs   = sysinfo.dwNumberOfProcessors;
             break;
         }
 
diff --git a/dlls/vcomp/tests/vcomp.c b/dlls/vcomp/tests/vcomp.c
index 478bb5d7cfe..16008d17728 100644
--- a/dlls/vcomp/tests/vcomp.c
+++ b/dlls/vcomp/tests/vcomp.c
@@ -117,6 +117,7 @@ static void  (CDECL   *pomp_destroy_lock)(omp_lock_t *lock);
 static void  (CDECL   *pomp_destroy_nest_lock)(omp_nest_lock_t *lock);
 static int   (CDECL   *pomp_get_max_threads)(void);
 static int   (CDECL   *pomp_get_nested)(void);
+static int   (CDECL   *pomp_get_num_procs)(void);
 static int   (CDECL   *pomp_get_num_threads)(void);
 static int   (CDECL   *pomp_get_thread_num)(void);
 static int   (CDECL   *pomp_in_parallel)(void);
@@ -352,6 +353,7 @@ static BOOL init_vcomp(void)
     VCOMP_GET_PROC(omp_destroy_nest_lock);
     VCOMP_GET_PROC(omp_get_max_threads);
     VCOMP_GET_PROC(omp_get_nested);
+    VCOMP_GET_PROC(omp_get_num_procs);
     VCOMP_GET_PROC(omp_get_num_threads);
     VCOMP_GET_PROC(omp_get_thread_num);
     VCOMP_GET_PROC(omp_in_parallel);
@@ -2209,11 +2211,24 @@ static void test_reduction_float_double(void)
     }
 }
 
+static void test_omp_get_num_procs(void)
+{
+    SYSTEM_INFO sysinfo;
+    int num_procs;
+
+    num_procs = pomp_get_num_procs();
+    ok(num_procs > 0, "expected non-zero num_procs\n");
+    GetSystemInfo(&sysinfo);
+    ok(sysinfo.dwNumberOfProcessors > 0, "expected non-zero dwNumberOfProcessors\n");
+    ok(num_procs == sysinfo.dwNumberOfProcessors, "got dwNumberOfProcessors %d num_procs %d\n", sysinfo.dwNumberOfProcessors, num_procs);
+}
+
 START_TEST(vcomp)
 {
     if (!init_vcomp())
         return;
 
+    test_omp_get_num_procs();
     test_omp_get_num_threads(FALSE);
     test_omp_get_num_threads(TRUE);
     test_vcomp_fork();
-- 
2.31.1




More information about the wine-devel mailing list