forked from FFTW/fftw3
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rationalized threads naming conventions: * threads explicitly managed by us are enabled by --enable-threads, predicated on HAVE_THREADS, etc. * openmp is enabled by --enable-openmp, predicated on HAVE_OPENMP, etc. * SMP denotes either THREADS or OPENMP.
- Loading branch information
1 parent
22cd21b
commit 9809db5
Showing
15 changed files
with
174 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* Copyright (c) 2003, 2006 Matteo Frigo | ||
* Copyright (c) 2003, 2006 Massachusetts Institute of Technology | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
* | ||
*/ | ||
|
||
/* openmp.c: thread spawning via OpenMP */ | ||
|
||
#include "threads.h" | ||
|
||
#ifdef HAVE_OPENMP | ||
|
||
#if !defined(_OPENMP) | ||
#error OpenMP enabled but not using an OpenMP compiler | ||
#endif | ||
|
||
int X(ithreads_init)(void) | ||
{ | ||
return 0; /* no error */ | ||
} | ||
|
||
/* Distribute a loop from 0 to loopmax-1 over nthreads threads. | ||
proc(d) is called to execute a block of iterations from d->min | ||
to d->max-1. d->thr_num indicate the number of the thread | ||
that is executing proc (from 0 to nthreads-1), and d->data is | ||
the same as the data parameter passed to X(spawn_loop). | ||
This function returns only after all the threads have completed. */ | ||
void X(spawn_loop)(int loopmax, int nthr, spawn_function proc, void *data) | ||
{ | ||
int block_size; | ||
spawn_data d; | ||
int i; | ||
|
||
A(loopmax >= 0); | ||
A(nthr > 0); | ||
A(proc); | ||
|
||
if (!loopmax) return; | ||
|
||
/* Choose the block size and number of threads in order to (1) | ||
minimize the critical path and (2) use the fewest threads that | ||
achieve the same critical path (to minimize overhead). | ||
e.g. if loopmax is 5 and nthr is 4, we should use only 3 | ||
threads with block sizes of 2, 2, and 1. */ | ||
block_size = (loopmax + nthr - 1) / nthr; | ||
nthr = (loopmax + block_size - 1) / block_size; | ||
|
||
THREAD_ON; /* prevent debugging mode from failing under threads */ | ||
#pragma omp parallel for private(d) | ||
for (i = 0; i < nthr; ++i) { | ||
d.max = (d.min = i * block_size) + block_size; | ||
if (d.max > loopmax) | ||
d.max = loopmax; | ||
d.thr_num = i; | ||
d.data = data; | ||
proc(&d); | ||
} | ||
THREAD_OFF; /* prevent debugging mode from failing under threads */ | ||
} | ||
|
||
void X(threads_cleanup)(void) | ||
{ | ||
} | ||
|
||
#endif /* HAVE_OPENMP */ |
Oops, something went wrong.