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