diff --git a/tensorflow/core/example/example.proto b/tensorflow/core/example/example.proto index a893bc0a9e4..4272764441e 100644 --- a/tensorflow/core/example/example.proto +++ b/tensorflow/core/example/example.proto @@ -3,7 +3,7 @@ syntax = "proto3"; import "tensorflow/core/example/feature.proto"; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "ExampleProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.example"; diff --git a/tensorflow/core/example/example_parser_configuration.proto b/tensorflow/core/example/example_parser_configuration.proto index 852151dc93f..8d9dacd9caa 100644 --- a/tensorflow/core/example/example_parser_configuration.proto +++ b/tensorflow/core/example/example_parser_configuration.proto @@ -2,7 +2,7 @@ syntax = "proto3"; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "ExampleParserConfigurationProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.example"; diff --git a/tensorflow/core/example/feature.proto b/tensorflow/core/example/feature.proto index af59bd69792..d9b1e26b448 100644 --- a/tensorflow/core/example/feature.proto +++ b/tensorflow/core/example/feature.proto @@ -54,7 +54,7 @@ // syntax = "proto3"; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "FeatureProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.example"; diff --git a/tensorflow/core/framework/allocation_description.proto b/tensorflow/core/framework/allocation_description.proto index 8c74ee16c8c..bb1037c2dfe 100644 --- a/tensorflow/core/framework/allocation_description.proto +++ b/tensorflow/core/framework/allocation_description.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "AllocationDescriptionProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/attr_value.proto b/tensorflow/core/framework/attr_value.proto index 4de32d410b3..3108b46f0b6 100644 --- a/tensorflow/core/framework/attr_value.proto +++ b/tensorflow/core/framework/attr_value.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "AttrValueProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/cost_graph.proto b/tensorflow/core/framework/cost_graph.proto index 85182104fea..62980db6da4 100644 --- a/tensorflow/core/framework/cost_graph.proto +++ b/tensorflow/core/framework/cost_graph.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "CostGraphProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/device_attributes.proto b/tensorflow/core/framework/device_attributes.proto index 1f1d22dc5c9..fa7020e6ad2 100644 --- a/tensorflow/core/framework/device_attributes.proto +++ b/tensorflow/core/framework/device_attributes.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "DeviceAttributesProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/function.proto b/tensorflow/core/framework/function.proto index 369c38a40f5..4003943a852 100644 --- a/tensorflow/core/framework/function.proto +++ b/tensorflow/core/framework/function.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "FunctionProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/graph.proto b/tensorflow/core/framework/graph.proto index 138fbee3bfa..1d3e7c9e76e 100644 --- a/tensorflow/core/framework/graph.proto +++ b/tensorflow/core/framework/graph.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "GraphProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/kernel_def.proto b/tensorflow/core/framework/kernel_def.proto index 4fe13336ca4..65e9ef04a06 100644 --- a/tensorflow/core/framework/kernel_def.proto +++ b/tensorflow/core/framework/kernel_def.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "KernelDefProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/log_memory.proto b/tensorflow/core/framework/log_memory.proto index 83971bd3587..d1e126330d2 100644 --- a/tensorflow/core/framework/log_memory.proto +++ b/tensorflow/core/framework/log_memory.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "LogMemoryProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/op_def.proto b/tensorflow/core/framework/op_def.proto index d2e4321b14b..acb480e0683 100644 --- a/tensorflow/core/framework/op_def.proto +++ b/tensorflow/core/framework/op_def.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "OpDefProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/step_stats.proto b/tensorflow/core/framework/step_stats.proto index fcec15b5c9d..4488f985c7a 100644 --- a/tensorflow/core/framework/step_stats.proto +++ b/tensorflow/core/framework/step_stats.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "StepStatsProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/summary.proto b/tensorflow/core/framework/summary.proto index bbd737d3897..10ee1c8779a 100644 --- a/tensorflow/core/framework/summary.proto +++ b/tensorflow/core/framework/summary.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "SummaryProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/tensor.proto b/tensorflow/core/framework/tensor.proto index c0a56107f61..6500ccde8d6 100644 --- a/tensorflow/core/framework/tensor.proto +++ b/tensorflow/core/framework/tensor.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "TensorProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/tensor_description.proto b/tensorflow/core/framework/tensor_description.proto index 5616db94451..6ac3c1b8810 100644 --- a/tensorflow/core/framework/tensor_description.proto +++ b/tensorflow/core/framework/tensor_description.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "TensorDescriptionProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/tensor_shape.proto b/tensorflow/core/framework/tensor_shape.proto index 8989aae1a57..1ec3c5323c2 100644 --- a/tensorflow/core/framework/tensor_shape.proto +++ b/tensorflow/core/framework/tensor_shape.proto @@ -1,7 +1,7 @@ // Protocol buffer representing the shape of tensors. syntax = "proto3"; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "TensorShapeProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/tensor_slice.proto b/tensorflow/core/framework/tensor_slice.proto index f9b2113f7d6..24b01661dc4 100644 --- a/tensorflow/core/framework/tensor_slice.proto +++ b/tensorflow/core/framework/tensor_slice.proto @@ -1,7 +1,7 @@ // Protocol buffer representing slices of a tensor syntax = "proto3"; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "TensorSliceProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/types.proto b/tensorflow/core/framework/types.proto index 9d267cbd029..051361bbed2 100644 --- a/tensorflow/core/framework/types.proto +++ b/tensorflow/core/framework/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "TypesProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/variable.proto b/tensorflow/core/framework/variable.proto index 2ec7aec3d00..aa76d58741f 100644 --- a/tensorflow/core/framework/variable.proto +++ b/tensorflow/core/framework/variable.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "VariableProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/framework/versions.proto b/tensorflow/core/framework/versions.proto index 426515740b6..7d5e58ae7d4 100644 --- a/tensorflow/core/framework/versions.proto +++ b/tensorflow/core/framework/versions.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "VersionsProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/kernels/example_parsing_ops.cc b/tensorflow/core/kernels/example_parsing_ops.cc index 008cf747e1f..4a0bb6f9d19 100644 --- a/tensorflow/core/kernels/example_parsing_ops.cc +++ b/tensorflow/core/kernels/example_parsing_ops.cc @@ -148,8 +148,9 @@ class ExampleParserOp : public OpKernel { // Preallocate dense_values, since we know their sizes TensorShape out_shape; out_shape.AddDim(batch_size); - for (const int64 dim : dense_shapes_[d].dim_sizes()) + for (const int64 dim : dense_shapes_[d].dim_sizes()) { out_shape.AddDim(dim); + } Tensor* out = nullptr; dense_values.allocate(d, out_shape, &out); @@ -193,11 +194,14 @@ class ExampleParserOp : public OpKernel { auto DoWork = [&ctx, &mu, &serialized_t, has_names, &names_t, &fixed_len_features, &var_len_features, &output_dense_values, &sparse_values_tmp](int64 start, int64 limit) { - Example ex; // Processing each Example in the batch starts here. for (std::size_t b = static_cast(start); b < static_cast(limit); ++b) { - bool parse_success = ParseProtoUnlimited(&ex, serialized_t(b)); + // Benchmarks indicate that a tight Arena+Example is most performant. + protobuf::Arena arena; + // ex is owned by the arena. + Example* ex = protobuf::Arena::CreateMessage(&arena); + bool parse_success = ParseProtoUnlimited(ex, serialized_t(b)); if (!TF_PREDICT_TRUE(parse_success)) { mutex_lock l(mu); ctx->CtxFailure(errors::InvalidArgument( @@ -206,7 +210,7 @@ class ExampleParserOp : public OpKernel { } const string& example_name = (has_names) ? names_t(b) : ""; Status s = SingleExampleProtoToTensors( - ex, example_name, b, fixed_len_features, var_len_features, + *ex, example_name, b, fixed_len_features, var_len_features, &output_dense_values, &sparse_values_tmp); if (!TF_PREDICT_TRUE(s.ok())) { mutex_lock l(mu); diff --git a/tensorflow/core/kernels/reader_base.proto b/tensorflow/core/kernels/reader_base.proto index c74152d4c5f..abef43eea56 100644 --- a/tensorflow/core/kernels/reader_base.proto +++ b/tensorflow/core/kernels/reader_base.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "ReaderBaseProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.kernels"; diff --git a/tensorflow/core/lib/core/error_codes.proto b/tensorflow/core/lib/core/error_codes.proto index 1b334677f1e..a7306c8cc12 100644 --- a/tensorflow/core/lib/core/error_codes.proto +++ b/tensorflow/core/lib/core/error_codes.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow.error; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "ErrorCodesProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/platform/default/protobuf.h b/tensorflow/core/platform/default/protobuf.h index 8eeedf403db..544f62d1f8e 100644 --- a/tensorflow/core/platform/default/protobuf.h +++ b/tensorflow/core/platform/default/protobuf.h @@ -19,6 +19,7 @@ limitations under the License. // IWYU pragma: private, include "third_party/tensorflow/core/platform/protobuf.h" // IWYU pragma: friend third_party/tensorflow/core/platform/protobuf.h +#include "google/protobuf/arena.h" #include "google/protobuf/compiler/importer.h" #include "google/protobuf/descriptor.h" #include "google/protobuf/io/coded_stream.h" diff --git a/tensorflow/core/protobuf/config.proto b/tensorflow/core/protobuf/config.proto index 3239712f874..d26a41563de 100644 --- a/tensorflow/core/protobuf/config.proto +++ b/tensorflow/core/protobuf/config.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "ConfigProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/protobuf/master.proto b/tensorflow/core/protobuf/master.proto index 4d4b513c202..1dc5e0271e3 100644 --- a/tensorflow/core/protobuf/master.proto +++ b/tensorflow/core/protobuf/master.proto @@ -16,7 +16,7 @@ limitations under the License. syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "DistributedRuntimeProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.distruntime"; diff --git a/tensorflow/core/protobuf/meta_graph.proto b/tensorflow/core/protobuf/meta_graph.proto index bea9b7c5df4..5a4fbdac840 100644 --- a/tensorflow/core/protobuf/meta_graph.proto +++ b/tensorflow/core/protobuf/meta_graph.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "MetaGraphProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/protobuf/named_tensor.proto b/tensorflow/core/protobuf/named_tensor.proto index bd09ad9749b..dd4976e3546 100644 --- a/tensorflow/core/protobuf/named_tensor.proto +++ b/tensorflow/core/protobuf/named_tensor.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "NamedTensorProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/protobuf/queue_runner.proto b/tensorflow/core/protobuf/queue_runner.proto index d7766f4846d..963e12784f9 100644 --- a/tensorflow/core/protobuf/queue_runner.proto +++ b/tensorflow/core/protobuf/queue_runner.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "QueueRunnerProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.framework"; diff --git a/tensorflow/core/protobuf/saver.proto b/tensorflow/core/protobuf/saver.proto index 5e72508c82a..b130c7343b4 100644 --- a/tensorflow/core/protobuf/saver.proto +++ b/tensorflow/core/protobuf/saver.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "SaverProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.util"; diff --git a/tensorflow/core/protobuf/tensorflow_server.proto b/tensorflow/core/protobuf/tensorflow_server.proto index bc99ae96a3e..c4077bd98e4 100644 --- a/tensorflow/core/protobuf/tensorflow_server.proto +++ b/tensorflow/core/protobuf/tensorflow_server.proto @@ -18,7 +18,7 @@ syntax = "proto3"; import "tensorflow/core/protobuf/config.proto"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "ServerProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.distruntime"; diff --git a/tensorflow/core/protobuf/worker.proto b/tensorflow/core/protobuf/worker.proto index 504d157c406..9b390dda4aa 100644 --- a/tensorflow/core/protobuf/worker.proto +++ b/tensorflow/core/protobuf/worker.proto @@ -16,7 +16,7 @@ limitations under the License. syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "WorkerProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.distruntime"; diff --git a/tensorflow/core/util/event.proto b/tensorflow/core/util/event.proto index ff14acd96f0..069e67a16d8 100644 --- a/tensorflow/core/util/event.proto +++ b/tensorflow/core/util/event.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "EventProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.util"; diff --git a/tensorflow/core/util/memmapped_file_system.proto b/tensorflow/core/util/memmapped_file_system.proto index e1f9345a5a4..bf6cb4af296 100644 --- a/tensorflow/core/util/memmapped_file_system.proto +++ b/tensorflow/core/util/memmapped_file_system.proto @@ -15,7 +15,7 @@ limitations under the License. syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; // A message that describes one region of memmapped file. message MemmappedFileSystemDirectoryElement { diff --git a/tensorflow/core/util/saved_tensor_slice.proto b/tensorflow/core/util/saved_tensor_slice.proto index d1e4e85edc9..62786859579 100644 --- a/tensorflow/core/util/saved_tensor_slice.proto +++ b/tensorflow/core/util/saved_tensor_slice.proto @@ -18,7 +18,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "SavedTensorSliceProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.util"; diff --git a/tensorflow/core/util/test_log.proto b/tensorflow/core/util/test_log.proto index d957ee2969f..61f29fe131c 100644 --- a/tensorflow/core/util/test_log.proto +++ b/tensorflow/core/util/test_log.proto @@ -3,7 +3,7 @@ syntax = "proto3"; import "google/protobuf/any.proto"; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; option java_outer_classname = "TestLogProtos"; option java_multiple_files = true; option java_package = "org.tensorflow.util.testlog"; diff --git a/tensorflow/python/training/checkpoint_state.proto b/tensorflow/python/training/checkpoint_state.proto index 3abcd719552..9172a5c3314 100644 --- a/tensorflow/python/training/checkpoint_state.proto +++ b/tensorflow/python/training/checkpoint_state.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tensorflow; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; // Protocol buffer representing the checkpoint state. // diff --git a/tensorflow/python/util/protobuf/compare_test.proto b/tensorflow/python/util/protobuf/compare_test.proto index fa0b5de9f07..445ba554065 100644 --- a/tensorflow/python/util/protobuf/compare_test.proto +++ b/tensorflow/python/util/protobuf/compare_test.proto @@ -2,7 +2,7 @@ syntax = "proto2"; package compare_test; -// option cc_enable_arenas = true; +option cc_enable_arenas = true; enum Enum { A = 0;