1 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2 ! Copyright 2010.  Los Alamos National Security, LLC. This material was    !
3 ! produced under U.S. Government contract DE-AC52-06NA25396 for Los Alamos !
4 ! National Laboratory (LANL), which is operated by Los Alamos National     !
5 ! Security, LLC for the U.S. Department of Energy. The U.S. Government has !
6 ! rights to use, reproduce, and distribute this software.  NEITHER THE     !
7 ! GOVERNMENT NOR LOS ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY,     !
8 ! EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS         !
9 ! SOFTWARE.  If software is modified to produce derivative works, such     !
10 ! modified software should be clearly marked, so as not to confuse it      !
11 ! with the version available from LANL.                                    !
12 !                                                                          !
13 ! Additionally, this program is free software; you can redistribute it     !
14 ! and/or modify it under the terms of the GNU General Public License as    !
15 ! published by the Free Software Foundation; version 2.0 of the License.   !
16 ! Accordingly, this program is distributed in the hope that it will be     !
17 ! useful, but WITHOUT ANY WARRANTY; without even the implied warranty of   !
18 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General !
19 ! Public License for more details.                                         !
20 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
21 
22 #include "Matrix.h"
23 
24 extern int ndevices;
25 extern int nblocks;
26 extern cudaStream_t stream[];
27 extern cudaEvent_t event[];
28 
29 // Wait till device streams are done
M_Wait()30 void M_Wait() {
31 
32   int cdev;
33 
34   // Save current device
35   cudaGetDevice(&cdev);
36 
37   // Wait till streams are done
38   for (int d = 0; d < ndevices; ++d) {
39     cudaSetDevice(d);
40     cudaStreamSynchronize(stream[d]);
41   }
42 
43   // Reset device
44   cudaSetDevice(cdev);
45 
46 }
47