1 /* Copyright 2015 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 
16 #ifndef TENSORFLOW_CORE_COMMON_RUNTIME_FUNCTION_H_
17 #define TENSORFLOW_CORE_COMMON_RUNTIME_FUNCTION_H_
18 
19 #include <functional>
20 #include <memory>
21 
22 #include "absl/types/optional.h"
23 #include "tensorflow/core/common_runtime/device.h"
24 #include "tensorflow/core/common_runtime/device_mgr.h"
25 #include "tensorflow/core/common_runtime/function_body.h"
26 #include "tensorflow/core/common_runtime/function_def_utils.h"
27 #include "tensorflow/core/common_runtime/function_utils.h"
28 #include "tensorflow/core/common_runtime/graph_optimizer.h"
29 #include "tensorflow/core/common_runtime/inline_function_utils.h"
30 #include "tensorflow/core/common_runtime/process_function_library_runtime.h"
31 #include "tensorflow/core/framework/function.h"
32 #include "tensorflow/core/graph/graph.h"
33 #include "tensorflow/core/protobuf/config.pb.h"
34 
35 namespace tensorflow {
36 
37 // Get default customizable kernel creator if set
38 const CustomKernelCreator* GetDefaultCustomKernelCreator();
39 
40 // Registers a default customizable kernel creator for a function call.
41 //
42 // If c->CanCreateKernel returns false, we still fall back to an executor-based
43 // interpreter op kernel to execute a function. Else c->CreateKernel() can be
44 // used to create a kernel that will compile the function with XLA and run the
45 // resulting program.
46 void RegisterDefaultCustomKernelCreator(CustomKernelCreator* c);
47 
48 // Creates a FunctionLibraryRuntime, which instantiates functions
49 // defined in "lib_def" and executes functions on the "device".
50 // "device_mgr" must contain the "device".
51 //
52 // The returned object does not take ownerships of "device" or
53 // "lib_def".  The caller must ensure "device" and "lib_def" outlives
54 // the returned object.
55 //
56 // The "parent" is a pointer to the ProcessFunctionLibraryRuntime object that
57 // typically owns the created FunctionLibraryRuntime object. The parent pointer
58 // is not owned by the FunctionLibraryRuntime object.
59 std::unique_ptr<FunctionLibraryRuntime> NewFunctionLibraryRuntime(
60     const DeviceMgr* device_mgr, Env* env, const ConfigProto* config,
61     Device* device, int graph_def_version,
62     const FunctionLibraryDefinition* lib_def, thread::ThreadPool* thread_pool,
63     const OptimizerOptions& optimizer_options,
64     const SessionMetadata* session_metadata,
65     ProcessFunctionLibraryRuntime* parent);
66 
67 // Given a numerical function "f", returns another numerical function
68 // "g", such that if "f" takes N inputs and produces M outputs, "g"
69 // takes N + M inputs and produces N outputs. I.e., if
70 //   (y1, y2, ..., y_M) = f(x1, x2, ..., x_N),
71 // g is a function which is
72 //   (dL/dx1, dL/dx2, ..., dL/dx_N) = g(x1, x2, ..., x_N,
73 //                                     dL/dy1, dL/dy2, ..., dL/dy_M),
74 // where L is a scalar-value function of (...x_i...).
75 //
76 // TODO(zhifengc): Asks math expert to say the comment again.
77 std::unique_ptr<FunctionBody> SymbolicGradient(const FunctionBody& f);
78 
79 }  // end namespace tensorflow
80 
81 #endif  // TENSORFLOW_CORE_COMMON_RUNTIME_FUNCTION_H_
82