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 | |