在 Torch C++ API 中,如何快速写入张量的内部数据?

In Torch C++ API, How to write to the internal data of a tensor fastly?

本文关键字:张量 内部 数据 何快速 C++ Torch API      更新时间:2023-10-16

我在前端使用火炬C++并希望在其中有一个具有指定值的张量。为了实现这一点,可以手动分配内存并设置值,然后使用torch::from_blob在内存块上构建一个张量,但这对我来说似乎不够干净。

在本文档的最底部,我发现我可以使用下标直接访问和修改数据。但是,这种方法的运行时间开销很大,可能是因为下标访问会将张量的元素视为 0-d 张量。以下代码在我的机器上花费超过 2 秒(-O3优化级别(,这对于现代 CPU 来说太长了。

torch::Tensor tensor = torch::empty({1000, 1000});
for(int i=0; i < 1000; i++)
{
for(int j=0 ; j < 1000; j++)
{
tensor[i][j] = calc_tensor_data(i,j);
}
}

有没有一种干净快捷的方法来实现这一目标?

在互联网上搜索了几个小时无果后,我脑海中有一个假设,我决定试一试。事实证明,同一文档中提到的访问器也与左值一样有效,尽管文档根本没有提到此功能。下面的代码很好,它和直接操作原始指针一样快。

torch::Tensor tensor = torch::empty({1000, 1000});
auto accessor = tensor.accessor<float,2>();
for(int i=0; i < 1000; i++)
{
for(int j=0 ; j < 1000; j++)
{
accessor[i][j] = calc_tensor_data(i,j);
}
}