首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibTorch中的固定内存

LibTorch中的固定内存
EN

Stack Overflow用户
提问于 2020-08-09 17:18:57
回答 1查看 461关注 0票数 1

我可能遗漏了一些非常基本的东西,但我在文档或在线上找不到任何解释

我试图将图形处理器at::Tensor复制到CPU上的固定张量,但一旦我复制它,CPU张量就不再被固定。我假设它只是创建一个新的GPU张量副本并分配它,但如果是这样的话,如何复制到预先分配的固定内存?

我的测试代码:

代码语言:javascript
复制
    at::Tensor gpu = at::randn({1025,1025}, device(at::kCUDA));
    at::Tensor pinned = at::empty(gpu.sizes(), device(at::kCPU).pinned_memory(true));
    std::cout << "Is Pinned: " << std::boolalpha << pinned.is_pinned() << std::endl;
    pinned = gpu.to(at::kCPU);
    std::cout << "Is Pinned: " << std::boolalpha << pinned.is_pinned() << std::endl;

输出为

代码语言:javascript
复制
Is Pinned: true
Is Pinned: false

使用torch::而不是at::也会发生这种情况

使用从源代码编译的LibTorch 1.5.0在Ubuntu16.04上进行了测试

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-09 21:15:24

我找到了一种方法,那就是使用copy_函数

代码语言:javascript
复制
...
//pinned = gpu.to(torch::kCPU, true);
gpu.copy_(pinned);
std::cout << "Is Pinned: " << std::boolalpha << pinned.is_pinned() << std::endl;

下面的输出

代码语言:javascript
复制
Is Pinned: true
Is Pinned: true

我想这是有意义的,因为to函数返回一个张量,而不是操作。尽管我希望to的某些变体允许这样做。

哦,好吧,事情是这样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63324584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档