gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:45:17 25 4
gpt4 key购买 nike

我正在使用 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 答案。不确定考虑到您的环境是否真的有意义。

我没有在 IVF 上测试过,但它适用于 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 库链接的方式链接。

关于memory - 使用 Fortran 查找可用的显卡内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com