1- /* Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
2- *
3- * Redistribution and use in source and binary forms, with or without
4- * modification, are permitted provided that the following conditions
5- * are met:
6- * * Redistributions of source code must retain the above copyright
7- * notice, this list of conditions and the following disclaimer.
8- * * Redistributions in binary form must reproduce the above copyright
9- * notice, this list of conditions and the following disclaimer in the
10- * documentation and/or other materials provided with the distribution.
11- * * Neither the name of NVIDIA CORPORATION nor the names of its
12- * contributors may be used to endorse or promote products derived
13- * from this software without specific prior written permission.
14- *
15- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AS IS'' AND ANY
16- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
19- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26- */
27-
281#include <math.h>
292#include <stdlib.h>
303
@@ -35,7 +8,7 @@ void initialize(double *restrict A, double *restrict Anew, int m, int n)
358 memset (A , 0 , n * m * sizeof (double ));
369 memset (Anew , 0 , n * m * sizeof (double ));
3710
38-
11+ // Can you parallelize this loop?
3912 for (int i = 0 ; i < m ; i ++ ){
4013 A [i ] = 100.0 ;
4114 Anew [i ] = 100.0 ;
@@ -45,29 +18,15 @@ void initialize(double *restrict A, double *restrict Anew, int m, int n)
4518double calcNext (double * restrict A , double * restrict Anew , int m , int n )
4619{
4720 double error = 0.0 ;
48-
49- for ( int j = 1 ; j < n - 1 ; j ++ )
50- {
51- for ( int i = 1 ; i < m - 1 ; i ++ )
52- {
53- Anew [OFFSET (j , i , m )] = 0.25 * ( A [OFFSET (j , i + 1 , m )] + A [OFFSET (j , i - 1 , m )]
54- + A [OFFSET (j - 1 , i , m )] + A [OFFSET (j + 1 , i , m )]);
55- error = fmax ( error , fabs (Anew [OFFSET (j , i , m )] - A [OFFSET (j , i , m )]));
56- }
57- }
21+
22+ // Implementation here
23+
5824 return error ;
5925}
6026
6127void swap (double * restrict A , double * restrict Anew , int m , int n )
6228{
63-
64- for ( int j = 1 ; j < n - 1 ; j ++ )
65- {
66- for ( int i = 1 ; i < m - 1 ; i ++ )
67- {
68- A [OFFSET (j , i , m )] = Anew [OFFSET (j , i , m )];
69- }
70- }
29+ // Implementation here
7130}
7231
7332void deallocate (double * restrict A , double * restrict Anew )
0 commit comments