blob: 1af7cc3b988c0f1d27e60f75edaaebbd3f483cbb [file] [log] [blame]
! Test the `acc_get_property' and '`acc_get_property_string' library
! functions by printing the results of those functions for all devices
! of all device types mentioned in the OpenACC standard.
!
! See also acc_get_property.c
program test
use openacc
implicit none
print *, "acc_device_none:"
! For completeness; not expected to print anything
call print_device_properties (acc_device_none)
print *, "acc_device_default:"
call print_device_properties (acc_device_default)
print *, "acc_device_host:"
call print_device_properties (acc_device_host)
print *, "acc_device_not_host:"
call print_device_properties (acc_device_not_host)
end program test
! Print the values of the properties of all devices of the given type
! and do basic device independent validation.
subroutine print_device_properties (device_type)
use openacc
use iso_c_binding, only: c_size_t
implicit none
integer, intent(in) :: device_type
integer :: device_count
integer :: device
integer(c_size_t) :: v
character*256 :: s
device_count = acc_get_num_devices(device_type)
do device = 0, device_count - 1
print "(a, i0)", " Device ", device
call acc_get_property_string (device, device_type, acc_property_vendor, s)
print "(a, a)", " Vendor: ", trim (s)
if (s == "") then
print *, "acc_property_vendor should not be empty."
stop 1
end if
v = acc_get_property (device, device_type, acc_property_memory)
print "(a, i0)", " Total memory: ", v
if (v < 0) then
print *, "acc_property_memory should not be negative."
stop 1
end if
v = acc_get_property (device, device_type, acc_property_free_memory)
print "(a, i0)", " Free memory: ", v
if (v < 0) then
print *, "acc_property_free_memory should not to be negative."
stop 1
end if
v = acc_get_property (device, device_type, int(2360, kind = acc_device_property))
if (v /= 0) then
print *, "Value of unknown numeric property should be 0."
stop 1
end if
call acc_get_property_string (device, device_type, acc_property_name, s)
print "(a, a)", " Name: ", trim (s)
if (s == "") then
print *, "acc_property_name should not be empty."
stop 1
end if
call acc_get_property_string (device, device_type, acc_property_driver, s)
print "(a, a)", " Driver: ", trim (s)
if (s == "") then
print *, "acc_property_driver should not be empty."
stop 1
end if
call acc_get_property_string (device, device_type, int(4060, kind = acc_device_property), s)
if (s /= "") then
print *, "Value of unknown string property should be empty string."
stop 1
end if
end do
end subroutine print_device_properties