diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2018-01-24 11:42:37 +0000 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2018-01-24 11:42:37 +0000 |
commit | 7e61d6e726694ed781326238881d3b2d686652b8 (patch) | |
tree | 1da74aaa1e3e48e5d0fdf780e60b258e4ed0aa6d | |
parent | 11ac39ad8b6ee2c5b9fc122d29f754152b80a85a (diff) |
Use memorymapped file
-rw-r--r-- | eval/src/vespa/eval/eval/value_cache/constant_tensor_loader.cpp | 42 |
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 |