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

LIU*_*uan 4 c++ pytorch libtorch

我正在使用 Torch 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

有没有干净快速的方法来实现这个目标?

LIU*_*uan 6

在网上搜索了几个小时无果后,我在脑海里有了一个假设,我决定试一试。事实证明,同一个文档中提到的访问器也可以作为左值使用,尽管文档根本没有提到这个特性。下面的代码就好了,和直接操作裸指针一样快。

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)