gem5 - 在 gem5 系统调用仿真中打开由 C++ std::ifstream 处理的二进制文件失败 is_open 检查
问题描述
我有mnist.loader.hpp头文件,它打开并读取给定路径中的t10k-images-idx3-ubyte和t10k-labels-idx1-ubyte二进制文件,std::ifstream
如下面的代码片段所示:
std::string imagePath = dataDir + std::string("t10k-images-idx3-ubyte");
std::string labelPath = dataDir + std::string("t10k-labels-idx1-ubyte");
std::ifstream imageStream(imagePath, std::ios::binary);
std::ifstream labelStream(labelPath, std::ios::binary);
具有这两个二进制文件的目录的路径dataDir
嵌入在mnist_caffe.cpp中。它可以根据我std::string dataDir = "data/"
在行中的设置进行更改。
我设置dataDir
为 /home/mohamed/
,然后编译并静态链接了一个 aarch64 可执行文件,我的目标是在 gem5 上模拟它。
问题:
gem5 总是无法读取文件。它给"Failed to read /home/mohamed/t10k-images-idx3-ubyte"
.
如果我们再次查看mnist_loader.hpp,我们会注意到此错误消息是由于文件未打开或已打开但无法读取:
if (!imageStream.is_open())
{
std::cerr << "Failed to load " << imagePath << std::endl;
return nullptr;
}
或者
imageStream.read(reinterpret_cast<char*>(&magic), sizeof(magic));
if (magic != 0x03080000)
{
std::cerr << "Failed to read " << imagePath << std::endl;
return nullptr;
}
或者
if (!imageStream.good())
{
std::cerr << "Failed to read " << imagePath << std::endl;
return nullptr;
}
我的猜测是gem5首先无法打开文件!
我的试验:
(我现在只对打开和阅读感兴趣t10k-images-idx3-ubyte
)
1-尝试使用 -i 选项将文件传递给标准输入:$ ./build/ARM/gem5.opt ./configs/example/se.py -c mnist_caffe -i '/home/mohamed/t10k-images-idx3-ubyte'
2-使用-o:$ ./build/ARM/gem5.opt ./configs/example/se.py -c mnist_caffe -o "-i /home/mohamed/t10k-images-idx3-ubyte"
3-使用--redirects:$ ./build/ARM/gem5.opt ./configs/example/se.py -c /home/mohamed/NNDeploy/ML-examples/armnn-mnist/mnist_caffe --redirects /home/mohamed/t10k-images-idx3-ubyte=/home/mohamed/t10k-images-idx3-ubyte
4-使用打开主机系统中的二进制文件,xxd
然后将其传递给标准输入:$ ./build/ARM/gem5.opt ./configs/example/se.py -c ~/NNDeploy/ML-examples/armnn-mnist/mnist_caffe -o " -i /usr/bin/xxd /home/mohamed/t10k-images-idx3-ubyte"
以上所有导致相同的读取失败消息。我的想法用完了,如果有人可以提供一些建议,那就太好了!
解决方案
推荐阅读
- javascript - React 函数不会重新分配(让)或推入数组
- .net - 有没有办法通过 .NET google cloud sdk 列出 google 项目名称?
- javascript - 源文件中引用了 Babel 转译模块吗?
- python-3.x - 如何从类中选择随机对象?
- javascript - Jquery将新数据附加到旧数据有重复问题
- c++ - 如何使用 Gtkmm 获取光标位置?
- java - 在arraylist中添加索引的for循环
- javascript - 三.js:children不能独立于parent使用lookAt
- swift - 如何在具有关联值的枚举上与 OR 运算符进行模式匹配?
- mysql - 如何使用codeigniter手动生成自动增量ID