我可能遗漏了一些非常基本的东西,但我在文档或在线上找不到任何解释
我试图将图形处理器at::Tensor复制到CPU上的固定张量,但一旦我复制它,CPU张量就不再被固定。我假设它只是创建一个新的GPU张量副本并分配它,但如果是这样的话,如何复制到预先分配的固定内存?
我的测试代码:
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;输出为
Is Pinned: true
Is Pinned: false使用torch::而不是at::也会发生这种情况
使用从源代码编译的LibTorch 1.5.0在Ubuntu16.04上进行了测试
发布于 2020-08-09 21:15:24
我找到了一种方法,那就是使用copy_函数
...
//pinned = gpu.to(torch::kCPU, true);
gpu.copy_(pinned);
std::cout << "Is Pinned: " << std::boolalpha << pinned.is_pinned() << std::endl;下面的输出
Is Pinned: true
Is Pinned: true我想这是有意义的,因为to函数返回一个张量,而不是操作。尽管我希望to的某些变体允许这样做。
哦,好吧,事情是这样的。
https://stackoverflow.com/questions/63324584
复制相似问题