diff --git a/tensorflow/compiler/xla/python/tpu_driver/BUILD b/tensorflow/compiler/xla/python/tpu_driver/BUILD index ee60db138a0..08da1c29832 100644 --- a/tensorflow/compiler/xla/python/tpu_driver/BUILD +++ b/tensorflow/compiler/xla/python/tpu_driver/BUILD @@ -74,8 +74,8 @@ cc_library( ) cc_library( - name = "external_tpu_driver", - srcs = ["external_tpu_driver.cc"], + name = "direct_tpu_driver", + srcs = ["direct_tpu_driver.cc"], deps = [ ":tpu_driver", "@com_google_absl//absl/strings:str_format", diff --git a/tensorflow/compiler/xla/python/tpu_driver/client/BUILD b/tensorflow/compiler/xla/python/tpu_driver/client/BUILD index 8e7d88d8f73..b5f1a831d4a 100644 --- a/tensorflow/compiler/xla/python/tpu_driver/client/BUILD +++ b/tensorflow/compiler/xla/python/tpu_driver/client/BUILD @@ -22,7 +22,7 @@ cc_library( "//tensorflow/compiler/xla/python:local_client", "//tensorflow/compiler/xla/python:semaphore", "//tensorflow/compiler/xla/python/tpu_driver", - "//tensorflow/compiler/xla/python/tpu_driver:external_tpu_driver", + "//tensorflow/compiler/xla/python/tpu_driver:direct_tpu_driver", "//tensorflow/compiler/xla/python/tpu_driver:grpc_tpu_driver", "//tensorflow/compiler/xla/python/tpu_driver:recording_tpu_driver", "//tensorflow/compiler/xla/python/tpu_driver:tpu_driver_proto_cc", diff --git a/tensorflow/compiler/xla/python/tpu_driver/client/c_api_client.c b/tensorflow/compiler/xla/python/tpu_driver/client/libtpu_client.c similarity index 93% rename from tensorflow/compiler/xla/python/tpu_driver/client/c_api_client.c rename to tensorflow/compiler/xla/python/tpu_driver/client/libtpu_client.c index 069de590deb..3bd53acc4c5 100644 --- a/tensorflow/compiler/xla/python/tpu_driver/client/c_api_client.c +++ b/tensorflow/compiler/xla/python/tpu_driver/client/libtpu_client.c @@ -13,11 +13,11 @@ See the License for the specific language governing permissions and limitations under the License. ==============================================================================*/ -// Before you start, make sure c_api.so, c_api.h and and c_api_client.c are in -// the same working directory. +// Before you start, make sure libtpu.so, libtpu.h and and libtpu_client.c are +// in the same working directory. // -// To compile: gcc -o c_api_client c_api_client.c -ldl -// To run: sudo ./c_api_client +// To compile: gcc -o libtpu_client libtpu_client.c -ldl +// To run: sudo ./libtpu_client #include <dlfcn.h> #include <stdio.h> @@ -28,7 +28,7 @@ limitations under the License. void* LoadAndInitializeDriver(const char* shared_lib, struct TpuDriverFn* driver_fn) { void* handle; - handle = dlopen("libtpu.so", RTLD_NOW); + handle = dlopen(shared_lib, RTLD_NOW); if (!handle) { fprintf(stderr, "Error: %s\n", dlerror()); exit(EXIT_FAILURE); @@ -42,8 +42,13 @@ void* LoadAndInitializeDriver(const char* shared_lib, } int main(int argc, char** argv) { + char* api_path = "./libtpu.so"; + if (argc == 2) { + api_path = argv[1]; + } + struct TpuDriverFn driver_fn; - void* handle = LoadAndInitializeDriver("./c_api.so", &driver_fn); + void* handle = LoadAndInitializeDriver(api_path, &driver_fn); fprintf(stdout, "------ Going to Query Version ------\n"); fprintf(stdout, "TPU Driver Version: %s\n", driver_fn.TpuDriver_Version()); diff --git a/tensorflow/compiler/xla/python/tpu_driver/external_tpu_driver.cc b/tensorflow/compiler/xla/python/tpu_driver/direct_tpu_driver.cc similarity index 78% rename from tensorflow/compiler/xla/python/tpu_driver/external_tpu_driver.cc rename to tensorflow/compiler/xla/python/tpu_driver/direct_tpu_driver.cc index 27fe92b03a3..1187edff342 100644 --- a/tensorflow/compiler/xla/python/tpu_driver/external_tpu_driver.cc +++ b/tensorflow/compiler/xla/python/tpu_driver/direct_tpu_driver.cc @@ -27,7 +27,7 @@ namespace tpu_driver { namespace { -constexpr char kExternalProtocol[] = "external://"; +constexpr char kDirectProtocol[] = "direct://"; ::TpuAllocationShape GetTpuAllocationShape(const xla::ShapeProto& shape) { ::TpuAllocationShape shape_; @@ -42,14 +42,14 @@ constexpr char kExternalProtocol[] = "external://"; return shape_; } -class ExternalTpuDriver; +class DirectTpuDriver; -class ExternalEvent : public Event { +class DirectEvent : public Event { public: - explicit ExternalEvent(::TpuDriverFn* driver_fn, ::TpuEvent* event) + explicit DirectEvent(::TpuDriverFn* driver_fn, ::TpuEvent* event) : driver_fn_(driver_fn), event_(event) {} - ~ExternalEvent() override { driver_fn_->TpuDriver_FreeEvent(event_); } + ~DirectEvent() override { driver_fn_->TpuDriver_FreeEvent(event_); } xla::Status Await() override { auto tpu_status = driver_fn_->TpuDriver_EventAwait(event_, -1); @@ -97,14 +97,14 @@ class ExternalEvent : public Event { ::TpuDriverFn* driver_fn_; ::TpuEvent* event_; - friend ExternalTpuDriver; + friend DirectTpuDriver; }; -class ExternalBufferHandle : public BufferHandle { +class DirectBufferHandle : public BufferHandle { public: - explicit ExternalBufferHandle(::TpuDriverFn* driver_fn, - ::TpuBufferHandle* handle) - : handle_(handle), event_(new ExternalEvent(driver_fn, handle->event)) {} + explicit DirectBufferHandle(::TpuDriverFn* driver_fn, + ::TpuBufferHandle* handle) + : handle_(handle), event_(new DirectEvent(driver_fn, handle->event)) {} std::shared_ptr<Event> OnReady() override { return event_; } @@ -117,18 +117,18 @@ class ExternalBufferHandle : public BufferHandle { private: ::TpuBufferHandle* handle_; - std::shared_ptr<ExternalEvent> event_; + std::shared_ptr<DirectEvent> event_; - friend ExternalTpuDriver; + friend DirectTpuDriver; }; -class ExternalCompiledProgramHandle : public CompiledProgramHandle { +class DirectCompiledProgramHandle : public CompiledProgramHandle { public: - explicit ExternalCompiledProgramHandle(::TpuDriverFn* driver_fn, - ::TpuCompiledProgramHandle* handle) + explicit DirectCompiledProgramHandle(::TpuDriverFn* driver_fn, + ::TpuCompiledProgramHandle* handle) : handle_(handle), driver_fn_(driver_fn), - event_(new ExternalEvent(driver_fn, handle->event)) {} + event_(new DirectEvent(driver_fn, handle->event)) {} std::shared_ptr<Event> OnReady() override { return event_; } @@ -152,16 +152,16 @@ class ExternalCompiledProgramHandle : public CompiledProgramHandle { private: ::TpuCompiledProgramHandle* handle_; ::TpuDriverFn* driver_fn_; - std::shared_ptr<ExternalEvent> event_; + std::shared_ptr<DirectEvent> event_; - friend ExternalTpuDriver; + friend DirectTpuDriver; }; -class ExternalLoadedProgramHandle : public LoadedProgramHandle { +class DirectLoadedProgramHandle : public LoadedProgramHandle { public: - explicit ExternalLoadedProgramHandle(::TpuDriverFn* driver_fn, - ::TpuLoadedProgramHandle* handle) - : handle_(handle), event_(new ExternalEvent(driver_fn, handle->event)) {} + explicit DirectLoadedProgramHandle(::TpuDriverFn* driver_fn, + ::TpuLoadedProgramHandle* handle) + : handle_(handle), event_(new DirectEvent(driver_fn, handle->event)) {} std::shared_ptr<Event> OnReady() override { return event_; } int64_t size_in_bytes() override { @@ -171,14 +171,14 @@ class ExternalLoadedProgramHandle : public LoadedProgramHandle { private: ::TpuLoadedProgramHandle* handle_; - std::shared_ptr<ExternalEvent> event_; + std::shared_ptr<DirectEvent> event_; - friend ExternalTpuDriver; + friend DirectTpuDriver; }; -class ExternalTpuLinearizer : public TpuLinearizer { +class DirectTpuLinearizer : public TpuLinearizer { public: - explicit ExternalTpuLinearizer(::TpuDriver* driver, ::TpuDriverFn* driver_fn) + explicit DirectTpuLinearizer(::TpuDriver* driver, ::TpuDriverFn* driver_fn) : driver_(driver), driver_fn_(driver_fn) {} int64_t ComputeLinearizedBytesFromShape( @@ -221,9 +221,9 @@ class ExternalTpuLinearizer : public TpuLinearizer { ::TpuDriverFn* driver_fn_; }; -class ExternalTpuDriver : public TpuDriver { +class DirectTpuDriver : public TpuDriver { public: - explicit ExternalTpuDriver(const std::string& so_path) { + explicit DirectTpuDriver(const std::string& so_path) { void* handle; handle = dlopen(so_path.c_str(), RTLD_NOW); if (!handle) { @@ -238,7 +238,7 @@ class ExternalTpuDriver : public TpuDriver { driver_ = driver_fn_.TpuDriver_Open("local://"); } - ~ExternalTpuDriver() override {} + ~DirectTpuDriver() override {} void QuerySystemInfo(SystemInfo* system_info) override { LOG(FATAL) << "Unimplemented."; @@ -250,7 +250,7 @@ class ExternalTpuDriver : public TpuDriver { int32_t core_id, MemoryRegion region, int64_t num_bytes, absl::Span<Event* const> wait_for) override { auto tpu_events = MakeEventArray(wait_for); - auto bh = absl::make_unique<ExternalBufferHandle>( + auto bh = absl::make_unique<DirectBufferHandle>( &driver_fn_, driver_fn_.TpuDriver_Allocate(driver_, core_id, region, num_bytes, wait_for.size(), tpu_events)); @@ -264,7 +264,7 @@ class ExternalTpuDriver : public TpuDriver { auto tpu_events = MakeEventArray(wait_for); ::TpuAllocationShape shape_ = GetTpuAllocationShape(shape); - auto bh = absl::make_unique<ExternalBufferHandle>( + auto bh = absl::make_unique<DirectBufferHandle>( &driver_fn_, driver_fn_.TpuDriver_AllocateShape(driver_, core_id, region, shape_, wait_for.size(), tpu_events)); @@ -283,10 +283,10 @@ class ExternalTpuDriver : public TpuDriver { ::TpuBufferHandle** childbuf = new ::TpuBufferHandle*[children.size()]; for (int i = 0; i < children.size(); i++) { childbuf[i] = - static_cast<ExternalBufferHandle* const>(children[i])->handle_; + static_cast<DirectBufferHandle* const>(children[i])->handle_; } - auto bh = absl::make_unique<ExternalBufferHandle>( + auto bh = absl::make_unique<DirectBufferHandle>( &driver_fn_, driver_fn_.TpuDriver_AllocateTuple( driver_, core_id, region, children.size(), childbuf, wait_for.size(), tpu_events)); @@ -300,10 +300,10 @@ class ExternalTpuDriver : public TpuDriver { std::unique_ptr<BufferHandle> handle, absl::Span<Event* const> wait_for) override { auto tpu_events = MakeEventArray(wait_for); - auto event = std::make_shared<ExternalEvent>( + auto event = std::make_shared<DirectEvent>( &driver_fn_, driver_fn_.TpuDriver_Deallocate( - driver_, static_cast<ExternalBufferHandle*>(handle.get())->handle_, + driver_, static_cast<DirectBufferHandle*>(handle.get())->handle_, wait_for.size(), tpu_events)); delete[] tpu_events; return event; @@ -313,10 +313,10 @@ class ExternalTpuDriver : public TpuDriver { const void* src, BufferHandle* dst, absl::Span<Event* const> wait_for) override { auto tpu_events = MakeEventArray(wait_for); - auto event = std::make_shared<ExternalEvent>( + auto event = std::make_shared<DirectEvent>( &driver_fn_, driver_fn_.TpuDriver_TransferToDevice( - driver_, src, static_cast<ExternalBufferHandle*>(dst)->handle_, + driver_, src, static_cast<DirectBufferHandle*>(dst)->handle_, wait_for.size(), tpu_events)); delete[] tpu_events; return event; @@ -326,11 +326,11 @@ class ExternalTpuDriver : public TpuDriver { const BufferHandle* src, void* dst, absl::Span<Event* const> wait_for) override { auto tpu_events = MakeEventArray(wait_for); - auto event = std::make_shared<ExternalEvent>( + auto event = std::make_shared<DirectEvent>( &driver_fn_, driver_fn_.TpuDriver_TransferFromDevice( - driver_, static_cast<const ExternalBufferHandle*>(src)->handle_, - dst, wait_for.size(), tpu_events)); + driver_, static_cast<const DirectBufferHandle*>(src)->handle_, dst, + wait_for.size(), tpu_events)); delete[] tpu_events; return event; } @@ -339,11 +339,11 @@ class ExternalTpuDriver : public TpuDriver { const BufferHandle* src, BufferHandle* dst, absl::Span<Event* const> wait_for) override { auto tpu_events = MakeEventArray(wait_for); - auto event = std::make_shared<ExternalEvent>( + auto event = std::make_shared<DirectEvent>( &driver_fn_, driver_fn_.TpuDriver_TransferFromDeviceToDevice( - driver_, static_cast<const ExternalBufferHandle*>(src)->handle_, - static_cast<ExternalBufferHandle*>(dst)->handle_, wait_for.size(), + driver_, static_cast<const DirectBufferHandle*>(src)->handle_, + static_cast<DirectBufferHandle*>(dst)->handle_, wait_for.size(), tpu_events)); delete[] tpu_events; return event; @@ -362,7 +362,7 @@ class ExternalTpuDriver : public TpuDriver { return nullptr; } - auto handle = absl::make_unique<ExternalCompiledProgramHandle>( + auto handle = absl::make_unique<DirectCompiledProgramHandle>( &driver_fn_, driver_fn_.TpuDriver_CompileProgram(driver_, hlo, num_replicas, wait_for.size(), tpu_events)); @@ -376,11 +376,11 @@ class ExternalTpuDriver : public TpuDriver { absl::Span<Event* const> wait_for) override { auto tpu_events = MakeEventArray(wait_for); - auto loaded_handle = absl::make_unique<ExternalLoadedProgramHandle>( + auto loaded_handle = absl::make_unique<DirectLoadedProgramHandle>( &driver_fn_, driver_fn_.TpuDriver_LoadProgram( driver_, core_id, - static_cast<const ExternalCompiledProgramHandle*>(handle)->handle_, + static_cast<const DirectCompiledProgramHandle*>(handle)->handle_, wait_for.size(), tpu_events)); delete[] tpu_events; @@ -391,11 +391,11 @@ class ExternalTpuDriver : public TpuDriver { std::unique_ptr<LoadedProgramHandle> handle, absl::Span<Event* const> wait_for) override { auto tpu_events = MakeEventArray(wait_for); - auto event = std::make_shared<ExternalEvent>( + auto event = std::make_shared<DirectEvent>( &driver_fn_, driver_fn_.TpuDriver_UnloadProgram( driver_, - static_cast<ExternalLoadedProgramHandle*>(handle.get())->handle_, + static_cast<DirectLoadedProgramHandle*>(handle.get())->handle_, wait_for.size(), tpu_events)); delete[] tpu_events; return event; @@ -412,22 +412,21 @@ class ExternalTpuDriver : public TpuDriver { inputv.reserve(inputs.size()); for (int i = 0; i < inputs.size(); i++) { inputv.push_back( - static_cast<ExternalBufferHandle* const>(inputs[i])->handle_); + static_cast<DirectBufferHandle* const>(inputs[i])->handle_); } std::vector<::TpuBufferHandle*> outputv; outputv.reserve(outputs.size()); for (int i = 0; i < outputs.size(); i++) { outputv.push_back( - static_cast<ExternalBufferHandle* const>(outputs[i])->handle_); + static_cast<DirectBufferHandle* const>(outputs[i])->handle_); } struct DeviceAssignment da = {device_assignment.replica_count(), device_assignment.computation_count()}; - auto event = std::make_shared<ExternalEvent>( + auto event = std::make_shared<DirectEvent>( &driver_fn_, driver_fn_.TpuDriver_ExecuteProgram( - driver_, - static_cast<ExternalLoadedProgramHandle*>(program)->handle_, + driver_, static_cast<DirectLoadedProgramHandle*>(program)->handle_, inputs.size(), inputv.data(), outputs.size(), outputv.data(), da, wait_for.size(), tpu_events)); @@ -436,7 +435,7 @@ class ExternalTpuDriver : public TpuDriver { } std::unique_ptr<TpuLinearizer> GetLinearizer() override { - return std::make_unique<ExternalTpuLinearizer>(driver_, &driver_fn_); + return std::make_unique<DirectTpuLinearizer>(driver_, &driver_fn_); } private: @@ -447,20 +446,20 @@ class ExternalTpuDriver : public TpuDriver { if (wait_for.empty()) return nullptr; ::TpuEvent** ret = new ::TpuEvent*[wait_for.size()]; for (int i = 0; i < wait_for.size(); i++) { - ret[i] = static_cast<ExternalEvent* const>(wait_for[i])->event_; + ret[i] = static_cast<DirectEvent* const>(wait_for[i])->event_; } return ret; } }; -xla::StatusOr<std::unique_ptr<TpuDriver>> RegisterExternalTpuDriver( +xla::StatusOr<std::unique_ptr<TpuDriver>> RegisterDirectTpuDriver( const TpuDriverConfig& config) { - std::string shared_lib = config.worker().substr(strlen(kExternalProtocol)); + std::string shared_lib = config.worker().substr(strlen(kDirectProtocol)); return xla::StatusOr<std::unique_ptr<TpuDriver>>( - absl::make_unique<ExternalTpuDriver>(shared_lib)); + absl::make_unique<DirectTpuDriver>(shared_lib)); } -REGISTER_TPU_DRIVER(kExternalProtocol, RegisterExternalTpuDriver); +REGISTER_TPU_DRIVER(kDirectProtocol, RegisterDirectTpuDriver); } // namespace } // namespace tpu_driver