From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4414 invoked by alias); 24 Jul 2006 14:19:37 -0000 Received: (qmail 4345 invoked by uid 48); 24 Jul 2006 14:19:29 -0000 Date: Mon, 24 Jul 2006 14:19:00 -0000 Subject: [Bug libgomp/28468] New: OpenMP-parallelized program crashes when OMP_NUM_THREADS > 1 X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "bruno at clisp dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2006-07/txt/msg01846.txt.bz2 List-Id: Versions: * gcc: gcc (GCC) 4.2.0 20060715 (experimental) * cpu: AMD-K7 (i686) * kernel: Linux 2.4.21-99 (SuSE 9.0) * glibc: glibc-2.3.6 built with LinuxThreads, _not_ NPTL Test program: ============================== omp-test1.c ======================= #include #include /* A computational task whose duration depends on x. */ int job (int x) { int j = rand() % (100 + 10 * x); int i; for (i = j - 1; i > 0; i--) if (j % i == 0) break; return i; } int main (int argc, char *argv[]) { int n = 10000; int *mem = malloc (n * sizeof (int)); int i; /* Because the tasks don't have all the same duration, a dynamic schedule is best. */ #pragma omp parallel for schedule(dynamic) for (i = 0; i < n; i++) mem[i] = job (i); for (i = 0; i < n; i++) printf ("mem[%d] = %d\n", i, mem[i]); return 0; } ===================================================================== $ gcc -fopenmp -Wall -O omp-test1.c The single-threaded program runs fine: $ unset OMP_NUM_THREADS; ./a.out or $ export OMP_NUM_THREADS=1; ./a.out But with more than one thread it crashes: $ export OMP_NUM_THREADS=2; ./a.out Segmentation fault (core dumped) $ gdb a.out core.26661 GNU gdb 6.4 Copyright 2005 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". Core was generated by `./a.out'. Program terminated with signal 11, Segmentation fault. Reading symbols from /gfs/ibook/Volumes/ExtData/bin.x86-linux/gnu-inst-gcc/4.2-20060715/lib/gcc/i686-pc-linux-gnu/4.2.0/libgomp.so.1...done. Loaded symbols for /packages/gnu-inst-gcc/4.2-20060715/lib/gcc/i686-pc-linux-gnu/4.2.0/libgomp.so.1 Reading symbols from /lib/libpthread.so.0...done. Loaded symbols for /lib/libpthread.so.0 Reading symbols from /lib/libc.so.6...done. Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/librt.so.1...done. Loaded symbols for /lib/librt.so.1 Reading symbols from /lib/ld-linux.so.2...done. Loaded symbols for /lib/ld-linux.so.2 #0 gomp_iter_dynamic_next (pstart=0xbfffe9c4, pend=0xbfffe9c8) at ../../../gcc-4.2-20060715/libgomp/iter.c:189 189 start = ws->next; (gdb) where #0 gomp_iter_dynamic_next (pstart=0xbfffe9c4, pend=0xbfffe9c8) at ../../../gcc-4.2-20060715/libgomp/iter.c:189 #1 0x4001c8e8 in gomp_loop_dynamic_next (istart=0xbfffe9c4, iend=0xbfffe9c8) at ../../../gcc-4.2-20060715/libgomp/loop.c:248 #2 0x080486ed in main.omp_fn.0 () #3 0x0804861e in main () (gdb) print ws $1 = (struct gomp_work_share *) 0x0 -- Summary: OpenMP-parallelized program crashes when OMP_NUM_THREADS > 1 Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libgomp AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bruno at clisp dot org GCC build triplet: i686-suse-linux-gnu GCC host triplet: i686-suse-linux-gnu GCC target triplet: i686-suse-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28468