summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2018-01-24 11:42:37 +0000
committerJon Bratseth <bratseth@yahoo-inc.com>2018-01-24 11:42:37 +0000
commit7e61d6e726694ed781326238881d3b2d686652b8 (patch)
tree1da74aaa1e3e48e5d0fdf780e60b258e4ed0aa6d /eval
parent11ac39ad8b6ee2c5b9fc122d29f754152b80a85a (diff)
Use memorymapped file
Diffstat (limited to 'eval')
-rw-r--r--eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp42
1 files changed, 19 insertions, 23 deletions
diff --git a/eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp b/eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp
index 208b37b455d..9eabb1e2813 100644
--- a/eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp
+++ b/eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp
@@ -80,32 +80,28 @@ ConstantTensorLoader::create(const vespalib::string &path, const vespalib::strin
return std::make_unique<SimpleConstantValue>(_engine.from_spec(TensorSpec("double")));
}
if (ends_with(path, ".tbf")) {
- vespalib::File file(path);
- file.open(File::READONLY);
- std::vector<char> content(file.stat()._size);
- file.read(&content[0], content.size(), 0);
- vespalib::nbostream_longlivedbuf stream(&content[0], content.size());
+ vespalib::MappedFileInput file(path);
+ vespalib::Memory content = file.get();
+ vespalib::nbostream stream(content.data, content.size);
return std::make_unique<SimpleConstantValue>(_engine.decode(stream));
}
- else {
- Slime slime;
- decode_json(path, slime);
- std::set<vespalib::string> indexed;
- for (const auto &dimension: value_type.dimensions()) {
- if (dimension.is_indexed()) {
- indexed.insert(dimension.name);
- }
- }
- TensorSpec spec(type);
- const Inspector &cells = slime.get()["cells"];
- for (size_t i = 0; i < cells.entries(); ++i) {
- TensorSpec::Address address;
- AddressExtractor extractor(indexed, address);
- cells[i]["address"].traverse(extractor);
- spec.add(address, cells[i]["value"].asDouble());
- }
- return std::make_unique<SimpleConstantValue>(_engine.from_spec(spec));
+ Slime slime;
+ decode_json(path, slime);
+ std::set<vespalib::string> indexed;
+ for (const auto &dimension: value_type.dimensions()) {
+ if (dimension.is_indexed()) {
+ indexed.insert(dimension.name);
+ }
+ }
+ TensorSpec spec(type);
+ const Inspector &cells = slime.get()["cells"];
+ for (size_t i = 0; i < cells.entries(); ++i) {
+ TensorSpec::Address address;
+ AddressExtractor extractor(indexed, address);
+ cells[i]["address"].traverse(extractor);
+ spec.add(address, cells[i]["value"].asDouble());
}
+ return std::make_unique<SimpleConstantValue>(_engine.from_spec(spec));
}
} // namespace vespalib::eval