openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
13 KiB

/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==============================================================================*/
#ifndef TENSORFLOW_COMPILER_XLA_PYTHON_TPU_DRIVER_CLIENT_LIBTPU_H_
#define TENSORFLOW_COMPILER_XLA_PYTHON_TPU_DRIVER_CLIENT_LIBTPU_H_
#include <stdbool.h>
#include <stdint.h>
#define TPUDRIVER_CAPI_EXPORT __attribute__((visibility("default")))
#ifdef __cplusplus
extern "C" {
#endif
// ------------------- TPU Driver Support -----------------------
struct TpuDriverFn;
typedef struct TpuDriver TpuDriver;
typedef struct TpuEvent TpuEvent;
typedef struct TpuBufferHandleInternal TpuBufferHandleInternal;
typedef struct TpuCompiledProgramHandleInternal
TpuCompiledProgramHandleInternal;
typedef struct TpuLoadedProgramHandleInternal TpuLoadedProgramHandleInternal;
typedef struct TpuBufferHandle {
TpuBufferHandleInternal* internal_handle;
TpuEvent* event;
int64_t size_in_bytes;
} TpuBufferHandle;
typedef struct TpuCompiledProgramHandle {
TpuCompiledProgramHandleInternal* internal_handle;
TpuEvent* event;
} TpuCompiledProgramHandle;
typedef struct TpuLoadedProgramHandle {
TpuLoadedProgramHandleInternal* internal_handle;
TpuEvent* event;
} TpuLoadedProgramHandle;
// HloProto is a serialized xla::HloProto buffer.
typedef struct HloProto {
void* buffer;
int32_t size;
} HloProto;
// DeviceAssignment is a serialized xla::DeviceAssignmentProto buffer.
typedef struct DeviceAssignment {
void* bytes;
int32_t size;
} DeviceAssignment;
typedef struct TpuStatus {
int32_t code;
char* msg;
} TpuStatus;
typedef struct CompiledProgramShape {
struct TpuStatus* status;
void* bytes;
int32_t size;
} CompiledProgramShape;
typedef struct TpuAllocationShape {
void* bytes;
int32_t size;
} TpuAllocationShape;
typedef struct TpuSystemInfo {
void* bytes;
int32_t size;
} TpuSystemInfo;
typedef void(PrototypeTpuDriver_Initialize)(struct TpuDriverFn* driver_fn,
bool initialize);
typedef struct TpuDriver*(PrototypeTpuDriver_Open)(const char* worker);
typedef void(PrototypeTpuDriver_Close)(struct TpuDriver* driver);
typedef struct TpuStatus*(PrototypeTpuDriver_Reset)(struct TpuDriver* driver);
typedef struct TpuSystemInfo*(PrototypeTpuDriver_QuerySystemInfo)(
struct TpuDriver* driver);
typedef void(PrototypeTpuDriver_FreeSystemInfo)(struct TpuSystemInfo* info);
// TODO(frankchn): Make this not a hard-coded constant.
const int32_t MemoryRegion_HBM = 1;
typedef int64_t(PrototypeTpuDriver_ComputeLinearizedBytesFromShape)(
struct TpuDriver* driver, const struct TpuAllocationShape shape);
typedef struct TpuStatus*(PrototypeTpuDriver_LinearizeShape)(
struct TpuDriver* driver, void* dst, const void* src,
const struct TpuAllocationShape shape);
typedef struct TpuStatus*(PrototypeTpuDriver_DelinearizeShape)(
struct TpuDriver* driver, void* dst, const void* src,
const struct TpuAllocationShape shape);
typedef struct TpuCompiledProgramHandle*(PrototypeTpuDriver_CompileProgram)(
struct TpuDriver* driver, const struct HloProto hlo_proto,
int32_t num_replicas, int32_t eventc, struct TpuEvent** eventv);
typedef struct TpuCompiledProgramHandle*(
PrototypeTpuDriver_CompileProgramFromText)(struct TpuDriver* driver,
const char* hlo_text,
int32_t num_replicas,
int32_t eventc,
struct TpuEvent** eventv);
/* Note: We are not responsible for freeing the event within the
* TpuCompiledProgramHandle. You have to call FreeEvent separately to ensure
* that memory does not leak.
*/
typedef void(PrototypeTpuDriver_FreeCompiledProgramHandle)(
struct TpuCompiledProgramHandle* handle);
typedef struct TpuLoadedProgramHandle*(PrototypeTpuDriver_LoadProgram)(
struct TpuDriver* driver, int32_t core_id,
const struct TpuCompiledProgramHandle* compiled_program_handle,
int32_t eventc, struct TpuEvent** eventv);
/* Note: We are not responsible for freeing the event within the
* TpuLoadedProgramHandle. You have to call FreeEvent separately to ensure that
* memory does not leak.
*/
typedef struct TpuEvent*(PrototypeTpuDriver_UnloadProgram)(
struct TpuDriver* driver,
struct TpuLoadedProgramHandle* loaded_program_handle, int32_t eventc,
struct TpuEvent** eventv);
typedef struct TpuEvent*(PrototypeTpuDriver_ExecuteProgram)(
struct TpuDriver* driver, struct TpuLoadedProgramHandle* handle,
int32_t inputc, struct TpuBufferHandle** input_buffer_handle,
int32_t outputc, struct TpuBufferHandle** output_buffer_handle,
struct DeviceAssignment device_assignment, int32_t eventc,
struct TpuEvent** eventv);
typedef struct TpuBufferHandle*(PrototypeTpuDriver_AllocateTuple)(
struct TpuDriver* driver, int32_t core_id, int32_t memory_region,
int32_t bufferc, struct TpuBufferHandle** buffer_handle, int32_t eventc,
struct TpuEvent** eventv);
typedef struct TpuBufferHandle*(PrototypeTpuDriver_Allocate)(
struct TpuDriver* driver, int32_t core_id, int32_t memory_region,
int64_t num_bytes, int32_t eventc, struct TpuEvent** eventv);
typedef struct TpuBufferHandle*(PrototypeTpuDriver_AllocateShape)(
struct TpuDriver* driver, int32_t core_id, int32_t memory_region,
const struct TpuAllocationShape shape, int32_t eventc,
struct TpuEvent** eventv);
/* Note: We are not responsible for freeing the event within the
* TpuBufferHandle. You have to call FreeEvent separately to ensure that memory
* does not leak.
*/
typedef struct TpuEvent*(PrototypeTpuDriver_Deallocate)(
struct TpuDriver* driver, struct TpuBufferHandle* buffer_handle,
int32_t eventc, struct TpuEvent** eventv);
typedef struct TpuEvent*(PrototypeTpuDriver_TransferToDevice)(
struct TpuDriver* driver, const void* src, struct TpuBufferHandle* dst,
int32_t eventc, struct TpuEvent** eventv);
typedef struct TpuEvent*(PrototypeTpuDriver_TransferFromDevice)(
struct TpuDriver* driver, struct TpuBufferHandle* src, void* dst,
int32_t eventc, struct TpuEvent** eventv);
typedef struct TpuEvent*(PrototypeTpuDriver_TransferFromDeviceToDevice)(
struct TpuDriver* driver, struct TpuBufferHandle* src,
struct TpuBufferHandle* dst, int32_t eventc, struct TpuEvent** eventv);
typedef struct CompiledProgramShape*(
PrototypeTpuDriver_GetCompiledProgramShape)(
struct TpuCompiledProgramHandle* handle);
typedef void(PrototypeTpuDriver_FreeCompiledProgramShape)(
struct CompiledProgramShape* shape);
typedef void(PrototypeTpuDriver_EventAddCallback)(
struct TpuEvent* event,
void (*callback_fn)(struct TpuStatus*, void* additional_info),
void* additional_info);
typedef struct TpuStatus*(PrototypeTpuDriver_EventAwait)(struct TpuEvent* event,
int64_t timeout_in_us);
typedef void(PrototypeTpuDriver_FreeEvent)(struct TpuEvent* event);
typedef void(PrototypeTpuDriver_FreeStatus)(struct TpuStatus* status);
typedef const char*(PrototypeTpuDriver_Version)();
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_Initialize TpuDriver_Initialize;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_Open TpuDriver_Open;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_Close TpuDriver_Close;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_Reset TpuDriver_Reset;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_QuerySystemInfo
TpuDriver_QuerySystemInfo;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_FreeSystemInfo
TpuDriver_FreeSystemInfo;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_ComputeLinearizedBytesFromShape
TpuDriver_ComputeLinearizedBytesFromShape;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_LinearizeShape
TpuDriver_LinearizeShape;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_DelinearizeShape
TpuDriver_DelinearizeShape;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_CompileProgram
TpuDriver_CompileProgram;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_CompileProgramFromText
TpuDriver_CompileProgramFromText;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_FreeCompiledProgramHandle
TpuDriver_FreeCompiledProgramHandle;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_LoadProgram
TpuDriver_LoadProgram;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_UnloadProgram
TpuDriver_UnloadProgram;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_ExecuteProgram
TpuDriver_ExecuteProgram;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_AllocateTuple
TpuDriver_AllocateTuple;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_Allocate TpuDriver_Allocate;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_AllocateShape
TpuDriver_AllocateShape;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_Deallocate TpuDriver_Deallocate;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_TransferToDevice
TpuDriver_TransferToDevice;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_TransferFromDevice
TpuDriver_TransferFromDevice;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_TransferFromDeviceToDevice
TpuDriver_TransferFromDeviceToDevice;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_GetCompiledProgramShape
TpuDriver_GetCompiledProgramShape;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_FreeCompiledProgramShape
TpuDriver_FreeCompiledProgramShape;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_EventAddCallback
TpuDriver_EventAddCallback;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_EventAwait TpuDriver_EventAwait;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_FreeEvent TpuDriver_FreeEvent;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_FreeStatus TpuDriver_FreeStatus;
TPUDRIVER_CAPI_EXPORT extern PrototypeTpuDriver_Version TpuDriver_Version;
#ifdef __cplusplus
}
#endif
struct TpuDriverFn {
PrototypeTpuDriver_Open* TpuDriver_Open; // NOLINT
PrototypeTpuDriver_Close* TpuDriver_Close; // NOLINT
PrototypeTpuDriver_Reset* TpuDriver_Reset; // NOLINT
PrototypeTpuDriver_ComputeLinearizedBytesFromShape*
TpuDriver_ComputeLinearizedBytesFromShape; // NOLINT
PrototypeTpuDriver_QuerySystemInfo* TpuDriver_QuerySystemInfo; // NOLINT
PrototypeTpuDriver_FreeSystemInfo* TpuDriver_FreeSystemInfo; // NOLINT
PrototypeTpuDriver_LinearizeShape* TpuDriver_LinearizeShape; // NOLINT
PrototypeTpuDriver_DelinearizeShape* TpuDriver_DelinearizeShape; // NOLINT
PrototypeTpuDriver_CompileProgram* TpuDriver_CompileProgram; // NOLINT
PrototypeTpuDriver_CompileProgramFromText*
TpuDriver_CompileProgramFromText; // NOLINT
PrototypeTpuDriver_FreeCompiledProgramHandle*
TpuDriver_FreeCompiledProgramHandle; // NOLINT
PrototypeTpuDriver_LoadProgram* TpuDriver_LoadProgram; // NOLINT
PrototypeTpuDriver_UnloadProgram* TpuDriver_UnloadProgram; // NOLINT
PrototypeTpuDriver_ExecuteProgram* TpuDriver_ExecuteProgram; // NOLINT
PrototypeTpuDriver_AllocateTuple* TpuDriver_AllocateTuple; // NOLINT
PrototypeTpuDriver_Allocate* TpuDriver_Allocate; // NOLINT
PrototypeTpuDriver_AllocateShape* TpuDriver_AllocateShape; // NOLINT
PrototypeTpuDriver_Deallocate* TpuDriver_Deallocate; // NOLINT
PrototypeTpuDriver_TransferToDevice* TpuDriver_TransferToDevice; // NOLINT
PrototypeTpuDriver_TransferFromDevice*
TpuDriver_TransferFromDevice; // NOLINT
PrototypeTpuDriver_TransferFromDeviceToDevice*
TpuDriver_TransferFromDeviceToDevice; // NOLINT
PrototypeTpuDriver_GetCompiledProgramShape*
TpuDriver_GetCompiledProgramShape; // NOLINT
PrototypeTpuDriver_FreeCompiledProgramShape*
TpuDriver_FreeCompiledProgramShape; // NOLINT
PrototypeTpuDriver_EventAddCallback* TpuDriver_EventAddCallback; // NOLINT
PrototypeTpuDriver_EventAwait* TpuDriver_EventAwait; // NOLINT
PrototypeTpuDriver_FreeEvent* TpuDriver_FreeEvent; // NOLINT
PrototypeTpuDriver_FreeStatus* TpuDriver_FreeStatus; // NOLINT
PrototypeTpuDriver_Version* TpuDriver_Version; // NOLINT
};
#endif // TENSORFLOW_COMPILER_XLA_PYTHON_TPU_DRIVER_CLIENT_LIBTPU_H_