c++11 - 在ARM计算库中初始化张量的正确方法?

标签 c++11 initialization arm tensor

在 ARM 计算库中初始化张量的正确方法是什么?我没有找到任何有关正确方法的文档。

我的张量包含 float (F32)。我可以通过 buffer() 接口(interface)访问底层数据来直接写入数据,该接口(interface)返回一个指向 uint8_t 的指针。但是,我不确定如何计算数据布局,因为它看起来不连续,即如果我将 4 个 float 写入 4x1 张量,

Tensor x{};

x.allocator()->init(TensorInfo(4, 1, Format::F32));

float xdata[] = {1, 2, 3, 4}; 
FILE *fd = fmemopen(x.buffer(), 4 * sizeof(float), "wb");
fwrite(xdata, sizeof(float), 4, fd);
fclose(fd);

x.print(std::cout);

打印出来,

1 2 3 1.17549e-38

“x”的前 3 个元素已初始化,但最后一个元素未初始化。如果我将 fwrite 行更改为,

fwrite(xdata, sizeof(float), 6, fd);

那么输出是

1 2 3 4

因此,分配的字节数可能多于 4 个浮点所需的字节数,或者这可能是一些误导性的巧合。不管怎样,这都不是初始化张量值的正确方法。

任何帮助将不胜感激。

最佳答案

从arm计算库文档(v18.08)来看,在您的情况下初始化的正确方法似乎是“import_memory”函数。请参阅此处的示例:https://github.com/ARM-software/ComputeLibrary/blob/master/tests/validation/NEON/UNIT/TensorAllocator.cpp

关于c++11 - 在ARM计算库中初始化张量的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51291025/

相关文章:

c++ - 无参数的 std::thread 构造函数

c++ - 将 std::vector emplace_back() 与 std::pair 与构造函数初始化列表一起使用

命名空间范围变量的 C++ 初始化

arm - 在 Qemu 中模拟基于 NAND 的存储设备?

android - 如何模拟 ARM 处理器运行时环境并加载 Linux 内核模块?

c++ - 如何在模板类中声明 friend 用户定义的文字运算符?

c++ - std::thread 有多标准?

c++ - 以字符数组为参数的模板元编程

我们可以在数组内联声明中分配更少的数组内容吗?

c - ARM neon 性能问题