OpenMP: "libgomp: Thread creation failed: Resource temporarily unavailable" when code run as regular user
Solution 1
Problem solved!
I was assigning the stack limit I need with ulimit -s <stack-size>
as opposed to doing it with setrlimit()
because I didnt believe that setrlimit()
was working.
ulimit -s
uses kilobytes and setrlimit()
uses bytes.
I was trying to assign 32388608 kilobytes rather than bytes!
Running as root allowed me to do this however a regular user Im assuming was not allowed utilize that much memory.
From the setrlimit()
man page:
The hard limit acts as a ceiling for the soft limit: an unprivileged process > may only set its soft limit to a value in the range from 0 up to the hard limit, and (irreversibly) lower its hard limit.
A privileged process ... may make arbitrary changes to either limit value.
Solution 2
fix the error :
"libgomp: Thread creation failed: Resource temporarily unavailable"
specialy in systems that have only 1-cpu, only need to reduce threads :
export OMP_NUM_THREADS=1
and go on....
conk
Updated on June 04, 2022Comments
-
conk almost 2 years
When I run the following example code:
#include "stdio.h" #include <omp.h> int main(int argc, char *argv[]) { #pragma omp parallel { int NCPU,tid,NPR,NTHR; /* get the total number of CPUs/cores available for OpenMP */ NCPU = omp_get_num_procs(); /* get the current thread ID in the parallel region */ tid = omp_get_thread_num(); /* get the total number of threads available in this parallel region */ NPR = omp_get_num_threads(); /* get the total number of threads requested */ NTHR = omp_get_max_threads(); /* only execute this on the master thread! */ if (tid == 0) { printf("%i : NCPU\t= %i\n",tid,NCPU); printf("%i : NTHR\t= %i\n",tid,NTHR); printf("%i : NPR\t= %i\n",tid,NPR); } printf("%i : hello multicore user! I am thread %i out of %i\n",tid,tid,NPR); } return(0); }
with the command:
gcc -fopenmp example.c -o example.exe
then./example
I get the error:libgomp: Thread creation failed: Resource temporarily unavailable
However, when I run this same code and command undersudo
I get the expected output:0 : NCPU = 4 0 : NTHR = 4 0 : NPR = 4 2 : hello multicore user! I am thread 2 out of 4 1 : hello multicore user! I am thread 1 out of 4 0 : hello multicore user! I am thread 0 out of 4 3 : hello multicore user! I am thread 3 out of 4
Im running Ubuntu 18.04 on x86_64 architecture with 4 cores.
Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 2 Core(s) per socket: 2 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 78 Model name: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
I dont really feel comfortable running c code with Openmp as root user. My question is, could someone provide information as to why this may be happening? Thanks
-
R.. GitHub STOP HELPING ICE over 5 yearsThis is probably a question about Ubuntu's default resource restrictions or something.
-
conk over 5 years@R.. Do you know where I could maybe find more information about what you are referring to?
-
R.. GitHub STOP HELPING ICE over 5 yearsI'm not a Ubuntu user so I don't know, but I don't see any reason this program should fail as an ordinary user without weird nonstandard restrictions on the normal user.
-
conk over 5 yearsLooking into ulimit further I see that my
ulimit -s
was 32388608. when I reduced this limit to 8000 the code ran fine. I am trying to figure out why setting ulimit on the command line would restrict the next executable that is run. Edit: I realize ulimit is obsolete and thatsetrlimit()
should be used. -
Mikko Rantalainen about 4 yearsI get the same error if virtual memory size limit (
ulimit -v
) is too low.
-
-
Admin over 2 yearsAs it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.