使用 Fortran 查找可用的显卡内存



我正在使用GlobalMemoryStatusEX来找出系统中的内存量。有没有类似的方法来查找我的显卡上的内存量?这是我的一段代码:

use kernel32
use ifwinty 
implicit none
type(T_MEMORYSTATUSEX) :: status
integer(8) :: RetVal
status%dwLength = sizeof(status)
RetVal =  GlobalMemoryStatusEX(status)
write(*,*) 'Memory Available =',status%ullAvailPhys

我在 Windows 7 x64 上使用 Intel Visual Fortran 2010。谢谢!

由于您使用 CUDA 标签标记了这个问题,我将提供 CUDA 答案。 不确定考虑到您的环境是否真的有意义。

我还没有在试管婴儿上测试过这个,但它适用于gfortran和PGI fortran(linux(。 您可以使用许多实现中提供的 fortran iso_c_binding 模块,在 fortran 代码中直接从 CUDA 运行时 API 库中调用例程。 其中一个例程是cudaMemGetInfo。

这是一个从gfortran(在Linux上(调用它的完整示例:

$ cat cuda_mem.f90
!=======================================================================================================================
!Interface to cuda C subroutines
!=======================================================================================================================
module cuda_rt
  use iso_c_binding
  interface
     !
     integer (c_int) function cudaMemGetInfo(fre, tot) bind(C, name="cudaMemGetInfo")
       use iso_c_binding
       implicit none
       type(c_ptr),value :: fre
       type(c_ptr),value :: tot
     end function cudaMemGetInfo
     !
  end interface
end module cuda_rt

!=======================================================================================================================
program main
!=======================================================================================================================
  use iso_c_binding
  use cuda_rt
  type(c_ptr) :: cpfre, cptot
  integer*8, target   :: freemem, totmem
  integer*4   :: stat
  freemem = 0
  totmem  = 0
  cpfre = c_loc(freemem)
  cptot = c_loc(totmem)
  stat = cudaMemGetInfo(cpfre, cptot)
  if (stat .ne. 0 ) then
      write (*,*)
      write (*, '(A, I2)') " CUDA error: ", stat
      write (*,*)
      stop
  end if
  write (*, '(A, I10)') "  free: ", freemem
  write (*, '(A, I10)') " total: ", totmem
  write (*,*)
end program main
$ gfortran -O3 cuda_mem.f90 -L/usr/local/cuda/lib64 -lcudart -o cuda_mem
$ ./cuda_mem
  free: 2755256320
 total: 2817982464
$

在Windows中,您需要正确安装CUDA环境(假定为Visual Studio(。 然后,您需要在该安装中找到cudart.lib,并链接到该安装中。 我不是 100% 确定这会在 IVF 中成功链接,因为我不知道它是否会像 VS 库链接的方式一样链接。

相关内容

  • 没有找到相关文章

最新更新