请问下 GPU的内存分配耗时间嘛

  • 3 replies
  • 25 views
*

sisiy

  • *****
  • 23
    • 查看个人资料
请问下 GPU的内存分配耗时间嘛
« 于: 一月 07, 2019, 04:15:12 pm »
答:
手册的原话:
(1)一般情况应用直接就即可
(2)非常频繁的较小的分配/释放过程,建议自行申请一次较大的显存,然后自行实现heap管理。

(或者如果分配大小是固定的。也可以简单的实现一个重用,而不是调用cudaMalloc之类的分配)
但是注意:
(1)第一次调用的Runtime API函数如果是显存分配, 往往需要较长时间
(2)有ECC的卡,初始化会更长时间(特别是Linux系统,如果你没有设定驱动驻留的话)。因为多了一个清理显存的过程。

不过第一次往往很多人都知道,不算计在内。


(无标题)
« 回复 #1 于: 一月 07, 2019, 04:23:53 pm »
说得比较全面了,确实是第一次调用Runtime API会很耗时,话说这个耗时会随着显存分配量的增长怎么变化呢,我试了下,好像显存分配的越多,那就越耗时,感觉这个Runtime API的耗时不是固定的。那么能否通过一开始分配一个小的闲置的显存块来消除这种影响呢。

(无标题)
« 回复 #2 于: 一月 07, 2019, 04:52:40 pm »
说得比较全面了,确实是第一次调用Runtime API会很耗时,话说这个耗时会随着显存分配量的增长怎么变化呢, ...

如果某次cudaMalloc*()会触发隐式runtime初始化,则初始化的耗时无固定公式可以计算。NV也不公布相关信息。而后续的cudaMalloc往往较快。

但是一般的,人们也不关心这个时间(你应当关心的是后续的kernel运行之类的时间)。毕竟很少有人运行一个CUDA应用,每次启动后,就执行一个操作就立刻结束;然后再次启动,再次执行第二个操作,然后再次结束。它总是会持续的运行的。


这就如同你不会开机,打开Word(开机和打开Word的时间等于初始化了),输入一个字立刻保存关机。然后再次开机再次输入一个字再关机。正常你总是开机(1分钟),打开Word(3秒钟),打上5000个字,然后保存,关机的。随着你的输入的字数越多,则平均每个字折合的初始化时间(开机打开Word)的时间越少。

请楼主三思。

PS: 你不能通过上去分配一个小块闲置显存来消除这种隐式自动的Runtime初始化的。


(无标题)
« 回复 #3 于: 一月 07, 2019, 05:06:48 pm »
多谢,明白了