SDK Reference
IOWarp SDK: Interprocess Communication, Runtime Modules, Context Transfer, Assimilation
Section 1: Hermes Shared Memory (Interprocess Communication)
High-performance shared memory for multi-process IPC. Hermes provides lock-free data structures and zero-copy communication, enabling efficient data sharing between processes without serialization overhead.
Key APIs
- •
hermes::ipc::MemoryBackend - •
hermes::ipc::Allocator - •
hermes::data_structures::*
Data Structures
- •
hipc::string— Shared memory string - •
hipc::vector<T>— Shared memory vector - •
hipc::list<T>— Shared memory list - •
hipc::unordered_map<K,V>— Shared memory map
Memory Backends
POSIX SHM
Standard POSIX shared memory for Linux/Unix systems
mmap
Memory-mapped files for persistent shared memory
CUDA
GPU HBM (High Bandwidth Memory) for GPU-accelerated workloads
Code Example
#include <hermes/hermes_shm.h>
// Get the global memory manager
auto mem = HERMES_MEMORY_MANAGER;
// Create an allocator for POSIX SHM
auto alloc = mem->GetAllocator<PosixShmMmap>(alloc_id);
// Create a shared memory vector
auto vec = hipc::make_mptr<hipc::vector<int>>(alloc);
vec->push_back(42);
vec->push_back(100);
// Access from another process using the same alloc_id
// The vector is automatically synchronized across processes Performance Characteristics
- • Zero-copy: Data structures live directly in shared memory, no serialization
- • Lock-free: Atomic operations for thread-safe access
- • Type-safe: C++ templates ensure compile-time type checking
Section 2: Chimaera Runtime Modules
Extensible task-based runtime system. Modules register as shared libraries loaded dynamically, enabling plugin-based architecture for IOWarp components.
Key Concepts
- Module: A shared library (.so) that implements the Chimaera module interface
- Task: A unit of work submitted to a module for execution
- TaskState: Lifecycle state (Pending, Running, Completed, Failed)
- Worker Threads: Thread pool that executes tasks asynchronously
Lifecycle
- Create module — Load shared library and initialize
- Submit tasks — Queue work items for processing
- Process results — Retrieve completed tasks and handle outcomes
Code Example
#include
// Create a module instance
chimaera::ModuleManager manager;
auto module = manager.LoadModule("libwrp_cte_core.so");
// Create a task
chimaera::Task task;
task.SetFunction("ProcessData");
task.SetArgs({data_ptr, data_size});
// Submit task
auto task_id = module->SubmitTask(task);
// Wait for completion
auto result = module->WaitForTask(task_id);
// Process result
if (result.GetState() == chimaera::TaskState::Completed) {
auto output = result.GetOutput();
// Use output...
} Module Interface
All Chimaera modules must implement the following interface:
class ChimaeraModule {
public:
virtual void Initialize(const Config& config) = 0;
virtual TaskId SubmitTask(const Task& task) = 0;
virtual TaskResult WaitForTask(TaskId id) = 0;
virtual void Shutdown() = 0;
}; Section 3: CLIO Transfer SDK
Hierarchical data movement across storage tiers. CLIO Transfer automatically manages data placement based on access patterns, cost, and performance requirements.
Key APIs
wrp::cte::Put() Store data in a bucket with automatic tier placement
wrp::cte::Get() Retrieve data from a bucket, promoting to faster tiers if needed
wrp::cte::PartialPut() Store a portion of data (offset + size)
wrp::cte::PartialGet() Retrieve a portion of data (offset + size)
Code Example
#include <wrp_cte/wrp_cte.h>
// Create a bucket (logical container for related data)
wrp::cte::Bucket bkt("my_data");
// Put data into the bucket
float* temperature_data = /* ... */;
size_t data_size = 1024 * sizeof(float);
bkt.Put("temperature", temperature_data, data_size);
// Get data from the bucket
float* output = new float[1024];
bkt.Get("temperature", output, data_size);
// Partial operations
bkt.PartialPut("temperature", temperature_data + 512,
512 * sizeof(float), 512 * sizeof(float));
bkt.PartialGet("temperature", output + 512,
512 * sizeof(float), 512 * sizeof(float)); Blob Operations
CLIO Transfer treats all data as blobs (binary large objects) with optional metadata:
- • Automatic compression
- • Checksum verification
- • Versioning support
Bucket Management
Buckets provide logical organization and access control:
- • Hierarchical naming (e.g.,
simulation/temperature) - • Metadata queries
- • Access policies
Context-Aware Placement
CLIO Transfer uses machine learning models to predict data access patterns and automatically move data to optimal storage tiers. Hot data (frequently accessed) moves to faster tiers (RAM, NVMe), while cold data moves to slower, cheaper tiers (PFS, tape).
Section 4: Context Assimilation (OMNI Format)
Unified scientific data representation. The OMNI file format normalizes HDF5, NetCDF, CSV, JSON into a common schema, enabling seamless access across heterogeneous formats.
Features
Multi-Format Support
- • HDF5, NetCDF, Zarr
- • CSV, JSON, Parquet
- • FITS, ROOT, PDB
- • 50+ scientific formats
Advanced Capabilities
- • Semantic metadata: CF conventions, NeXus standards
- • Lazy loading: Load only requested data
- • Streaming support: Process data as it arrives
Code Example
#include
// Create an OMNI file from HDF5
omni::File file;
file.Open("/data/climate.h5", omni::Format::HDF5);
// Query data using unified API
auto temperature = file.GetVariable("temperature");
auto dims = temperature.GetDimensions(); // [time, lat, lon]
// Access data (automatically converted to OMNI format)
auto data = temperature.Read();
// Create new OMNI file
omni::File output;
output.Create("/data/output.omni", omni::Format::OMNI);
// Write data (can be read back as any format)
output.WriteVariable("temperature", data, dims);
// Convert to NetCDF
output.Export("/data/output.nc", omni::Format::NetCDF);
// Query with semantic filters
auto filtered = file.Query({
{"variable", "temperature"},
{"time_range", "2024-01-01:2024-12-31"},
{"lat_range", "-90:90"},
{"lon_range", "0:360"}
}); OMNI Schema
The OMNI format uses a unified schema based on scientific data conventions:
- • Variables: Named data arrays with dimensions
- • Dimensions: Coordinate axes (time, space, etc.)
- • Attributes: Metadata (units, long_name, etc.)
- • Groups: Hierarchical organization