This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[committed] Add kernels-loop-nest-independent.f95


[ was: Re: [gomp4] New test loop independent clause ]

On 15/07/15 12:43, Tom de Vries wrote:
I'm not sure if I mentioned it at the meeting, but marking the outer
loop of that example as independent does not result in parallelization
either. So that's something to be investigated.

I've got it working now.

Committed to gomp-4_0-branch.

Thanks,
- Tom

Add kernels-loop-nest-independent.f95

2015-07-15  Tom de Vries  <tom@codesourcery.com>

	* gfortran.dg/goacc/kernels-loop-nest-independent.f95: New test.

	* testsuite/libgomp.oacc-fortran/kernels-loop-nest-independent.f95: New
	test.

diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95
new file mode 100644
index 0000000..436048e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95
@@ -0,0 +1,41 @@
+! { dg-do compile }
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-ftree-parallelize-loops=32" }
+! { dg-additional-options "-fdump-tree-parloops_oacc_kernels-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+! Based on autopar/outer-1.c.
+
+program main
+  implicit none
+  integer, parameter         :: n = 500
+  integer, dimension (0:n-1, 0:n-1) :: x
+  integer                    :: i, j, ii, jj
+
+
+  !$acc kernels copyout (x)
+  !$acc loop independent
+  do ii = 0, n - 1
+     do jj = 0, n - 1
+        x(jj, ii) = ii + jj + 3
+     end do
+  end do
+  !$acc end kernels
+
+  do i = 0, n - 1
+     do j = 0, n - 1
+        if (x(i, j) .ne. i + j + 3) call abort
+     end do
+  end do
+
+end program main
+
+! Check that only one loop is analyzed, and that it can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized, marked independent" 1 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops_oacc_kernels" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } }
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-nest-independent.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-nest-independent.f95
new file mode 100644
index 0000000..87a3d23
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-nest-independent.f95
@@ -0,0 +1,28 @@
+! { dg-do run }
+! { dg-options "-ftree-parallelize-loops=32" }
+
+! Based on autopar/outer-1.c.
+
+program main
+  implicit none
+  integer, parameter         :: n = 500
+  integer, dimension (0:n-1, 0:n-1) :: x
+  integer                    :: i, j, ii, jj
+
+
+  !$acc kernels copyout (x)
+  !$acc loop independent
+  do ii = 0, n - 1
+     do jj = 0, n - 1
+        x(jj, ii) = ii + jj + 3
+     end do
+  end do
+  !$acc end kernels
+
+  do i = 0, n - 1
+     do j = 0, n - 1
+        if (x(i, j) .ne. i + j + 3) call abort
+     end do
+  end do
+
+end program main
-- 
1.9.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]