Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $ cat idiocy.f90
- module mathOps
- contains
- attributes(global) subroutine saxpy(x, y, a)
- implicit none
- real :: x(:), y(:)
- real, value :: a
- integer :: i, n
- n = size(x)
- i = blockDim%x * (blockIdx%x - 1) + threadIdx%x
- if (i <= n) y(i) = y(i) + a*x(i)
- end subroutine saxpy
- end module mathOps
- program testSaxpy
- use mathOps
- use cudafor
- implicit none
- integer, parameter :: N = 40000
- real :: x(N), y(N), a
- real, device :: x_d(N), y_d(N)
- type(dim3) :: grid, tBlock
- tBlock = dim3(256,1,1)
- grid = dim3(ceiling(real(N)/tBlock%x),1,1)
- x = 1.0; y = 2.0; a = 2.0
- x_d = x
- y_d = y
- call saxpy<<<grid, tBlock>>>(x_d, y_d, a)
- y = y_d
- write(*,*) 'Max error: ', maxval(abs(y-4.0))
- end program testSaxpy
- $ ldd idiocy
- linux-vdso.so.1 => (0x00007ffcac1e9000)
- libcudafor80.so => /opt/pgi/linux86-64/18.4/lib/libcudafor80.so (0x00007f3b5be46000)
- libcudafor.so => /opt/pgi/linux86-64/18.4/lib/libcudafor.so (0x00007f3b57dd1000)
- libcublas.so.8.0 => /opt/pgi/linux86-64/2018/cuda/8.0/lib64/libcublas.so.8.0 (0x00007f3b55421000)
- libcusparse.so.8.0 => /opt/pgi/linux86-64/2018/cuda/8.0/lib64/libcusparse.so.8.0 (0x00007f3b52913000)
- libcurand.so.8.0 => /opt/pgi/linux86-64/2018/cuda/8.0/lib64/libcurand.so.8.0 (0x00007f3b4e9a9000)
- libcudaforwrapblas.so => /opt/pgi/linux86-64/18.4/lib/libcudaforwrapblas.so (0x00007f3b4e770000)
- libcudart.so.8.0 => /opt/pgi/linux86-64/2018/cuda/8.0/lib64/libcudart.so.8.0 (0x00007f3b4e50a000)
- libcudafor2.so => /opt/pgi/linux86-64/18.4/lib/libcudafor2.so (0x00007f3b4e308000)
- libpgf90rtl.so => /opt/pgi/linux86-64/18.4/lib/libpgf90rtl.so (0x00007f3b4e0e5000)
- libpgf90.so => /opt/pgi/linux86-64/18.4/lib/libpgf90.so (0x00007f3b4db44000)
- libpgf90_rpm1.so => /opt/pgi/linux86-64/18.4/lib/libpgf90_rpm1.so (0x00007f3b4d941000)
- libpgf902.so => /opt/pgi/linux86-64/18.4/lib/libpgf902.so (0x00007f3b4d72d000)
- libpgftnrtl.so => /opt/pgi/linux86-64/18.4/lib/libpgftnrtl.so (0x00007f3b4d4fc000)
- libpgmp.so => /opt/pgi/linux86-64/18.4/lib/libpgmp.so (0x00007f3b4d27a000)
- libnuma.so => /opt/pgi/linux86-64/18.4/lib/libnuma.so (0x00007f3b4d079000)
- libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3b4ce37000)
- libpgmath.so => /opt/pgi/linux86-64/18.4/lib/libpgmath.so (0x00007f3b4c97f000)
- libpgc.so => /opt/pgi/linux86-64/18.4/lib/libpgc.so (0x00007f3b4c736000)
- librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f3b4c52e000)
- libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3b4c227000)
- libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3b4be5e000)
- libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f3b4bc47000)
- /lib64/ld-linux-x86-64.so.2 (0x000055942ca2c000)
- libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3b4ba42000)
- libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f3b4b72f000)
- $ pgf90 -Mcuda=cc50 -o idiocy idiocy.f90
- $ ./idiocy
- Max error: 0.000000
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement