Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在cuda卡上实际分配多少内存_Cuda - Fatal编程技术网

我可以在cuda卡上实际分配多少内存

我可以在cuda卡上实际分配多少内存,cuda,Cuda,我正在编写一个使用cuda在GPU上执行计算的服务器进程。我想排队等待即将到来的请求,直到设备上有足够的内存来运行作业,但我很难弄清楚我可以在设备上分配多少内存。我对一个作业需要多少内存有一个很好的估计(至少从cudamaloc()分配多少内存),但我在分配全局可用内存总量之前很久就将设备从内存中取出了 有什么公式可以从全局内存总量中计算出我可以分配的内存量吗?我可以使用它,直到我得到一个经验上有效的估计,但我担心我的客户会在某个时候部署不同的卡,我的偷工减料的数字不会很好地工作 GPU DRA

我正在编写一个使用cuda在GPU上执行计算的服务器进程。我想排队等待即将到来的请求,直到设备上有足够的内存来运行作业,但我很难弄清楚我可以在设备上分配多少内存。我对一个作业需要多少内存有一个很好的估计(至少从cudamaloc()分配多少内存),但我在分配全局可用内存总量之前很久就将设备从内存中取出了


有什么公式可以从全局内存总量中计算出我可以分配的内存量吗?我可以使用它,直到我得到一个经验上有效的估计,但我担心我的客户会在某个时候部署不同的卡,我的偷工减料的数字不会很好地工作

GPU DRAM的大小是通过
cudaMalloc
分配的内存量的上限,但无法保证CUDA运行时能够在一次大分配,甚至一系列小分配中满足对所有内存的请求

内存分配的限制取决于操作系统底层驱动程序模型的详细信息。例如,如果所讨论的GPU是主显示设备,那么操作系统也可能为图形保留了GPU内存的一部分。运行时使用的其他隐式状态(如堆)也会消耗内存资源。也有可能内存已经支离破碎,没有足够大的连续块来满足请求


CUDART API函数
cudaMemGetInfo
报告可用的可用内存量和总内存量。据我所知,没有类似的API调用可以报告最大可满足分配请求的大小。

您的GPU的DRAM大小是您可以通过
cudamaloc
分配的内存量的上限,但是,不能保证CUDA运行时能够在单个大的分配中,甚至在一系列小的分配中满足所有请求

内存分配的限制取决于操作系统底层驱动程序模型的详细信息。例如,如果所讨论的GPU是主显示设备,那么操作系统也可能为图形保留了GPU内存的一部分。运行时使用的其他隐式状态(如堆)也会消耗内存资源。也有可能内存已经支离破碎,没有足够大的连续块来满足请求


CUDART API函数
cudaMemGetInfo
报告可用的可用内存量和总内存量。据我所知,没有类似的API调用可以报告最大可满足分配请求的大小。

有趣。我的印象是,您可以分配整个全局内存空间,可能更少。您的图形卡是否被系统中的其他任何东西使用?如果您使用的是CUDA 4.0,则可以使用CUDA工具SDK或已构建的工具进行检查。。。我现在将测试我的系统,看看是否有同样的问题。我可能应该提到我使用的是cufft,我不能直接跟踪它,但文档说它可以占用内存中高达3倍的FFT大小。这似乎不足以解释这种差异。你用的是什么GPU?它有多少全局内存?使用SDK中的deviceQuery工具进行检查。我只是玩了一下,看起来我可以轻松地在ym GTX470上分配1208/1280兆的全局内存,只需一次调用Cudamaloc就可以了。很有可能是库夫特造成的;否则,程序中可能存在内存泄漏。你是不是应该给cudaFree打电话?可能是你正在使用的库内存泄漏。这是一个1G内存的Quadro 600。我把我的cudaMallocs和free封装在一个指针类中。我添加了跟踪和打印声明,我可以看到我没有泄漏。此外,服务器可以使用小作业运行很长时间而不会出现任何问题,因此不太可能出现泄漏。在内存耗尽之前,您可以分配多少内存?使用CUFFT和内存大小N的最坏情况估计值似乎是N=(T-k)/3,其中T是广告的全局内存总量,N是使用CUFFT的量,k是一个小的开销量。假设k为5/6,mine=60MB,T=1024MB,那么n大约为321兆字节。你到底得到了多少?很有意思。我的印象是,您可以分配整个全局内存空间,可能更少。您的图形卡是否被系统中的其他任何东西使用?如果您使用的是CUDA 4.0,则可以使用CUDA工具SDK或已构建的工具进行检查。。。我现在将测试我的系统,看看是否有同样的问题。我可能应该提到我使用的是cufft,我不能直接跟踪它,但文档说它可以占用内存中高达3倍的FFT大小。这似乎不足以解释这种差异。你用的是什么GPU?它有多少全局内存?使用SDK中的deviceQuery工具进行检查。我只是玩了一下,看起来我可以轻松地在ym GTX470上分配1208/1280兆的全局内存,只需一次调用Cudamaloc就可以了。很有可能是库夫特造成的;否则,程序中可能存在内存泄漏。你是不是应该给cudaFree打电话?可能是你正在使用的库内存泄漏。这是一个1G内存的Quadro 600。我把我的cudaMallocs和free封装在一个指针类中。我添加了跟踪和打印声明,我可以看到我没有泄漏。此外,服务器可以使用小作业运行很长时间而不会出现任何问题,因此不太可能出现泄漏。在内存耗尽之前,您可以分配多少内存?这看起来像是一场战争