synor/sdk/cpp
Gulshan Yadav 162227dc71 docs(sdk): add comprehensive documentation for all 12 SDKs
Add README.md documentation for:
- Main SDK overview with quick start guides
- JavaScript/TypeScript SDK
- Python SDK
- Go SDK
- Rust SDK
- Java SDK
- Kotlin SDK
- Swift SDK
- Flutter/Dart SDK
- C SDK
- C++ SDK
- C#/.NET SDK
- Ruby SDK

Each README includes:
- Installation instructions
- Quick start examples
- Tensor operations
- Matrix operations (matmul, conv2d, attention)
- LLM inference (single and streaming)
- Configuration options
- Error handling
- Type definitions
2026-01-11 18:05:03 +05:30
..
include/synor feat(sdk): add consumer SDKs for Java, Kotlin, Swift, C, C++, C#, Ruby, and Rust 2026-01-11 17:46:22 +05:30
src feat(sdk): add consumer SDKs for Java, Kotlin, Swift, C, C++, C#, Ruby, and Rust 2026-01-11 17:46:22 +05:30
.gitignore feat(sdk): add consumer SDKs for Java, Kotlin, Swift, C, C++, C#, Ruby, and Rust 2026-01-11 17:46:22 +05:30
CMakeLists.txt feat(sdk): add consumer SDKs for Java, Kotlin, Swift, C, C++, C#, Ruby, and Rust 2026-01-11 17:46:22 +05:30
README.md docs(sdk): add comprehensive documentation for all 12 SDKs 2026-01-11 18:05:03 +05:30

Synor Compute SDK for C++

Access distributed heterogeneous compute at 90% cost reduction.

Installation

Using CMake

find_package(SynorCompute REQUIRED)
target_link_libraries(your_app PRIVATE synor::compute)

vcpkg

vcpkg install synor-compute

Conan

[requires]
synor-compute/0.1.0

Quick Start

#include <synor/compute.hpp>
#include <iostream>

int main() {
    synor::Client client("your-api-key");

    // Matrix multiplication on GPU
    auto a = synor::Tensor::random({512, 512});
    auto b = synor::Tensor::random({512, 512});

    auto result = client.matmul(a, b)
        .precision(synor::Precision::FP16)
        .processor(synor::ProcessorType::GPU)
        .execute();

    if (result.isSuccess()) {
        std::cout << "Time: " << result.executionTimeMs() << "ms\n";
        std::cout << "Cost: $" << result.cost() << "\n";
    }

    return 0;
}

Modern C++ Features

Auto Type Deduction

auto tensor = synor::Tensor::random({10, 10});
auto result = client.matmul(a, b).execute();

Structured Bindings (C++17)

auto [success, data, error] = client.matmul(a, b).execute();
if (success) {
    std::cout << "Result shape: " << data.shape() << "\n";
}

std::optional Results

if (auto time = result.executionTimeMs()) {
    std::cout << "Execution time: " << *time << "ms\n";
}

Tensor Operations

// Create tensors
auto zeros = synor::Tensor::zeros({3, 3});
auto ones = synor::Tensor::ones({2, 2});
auto random = synor::Tensor::random({10, 10});
auto randn = synor::Tensor::randn({100});
auto eye = synor::Tensor::eye(3);

// From std::vector
std::vector<float> data = {1, 2, 3, 4, 5, 6};
auto tensor = synor::Tensor(data, {2, 3});

// From initializer list
auto tensor2 = synor::Tensor({1.0f, 2.0f, 3.0f}, {3});

// Operations
auto reshaped = tensor.reshape({3, 2});
auto transposed = tensor.transpose();

// Math
float mean = tensor.mean();
float sum = tensor.sum();
float std_dev = tensor.std();

Builder Pattern API

// Matrix multiplication
auto result = client.matmul(a, b)
    .precision(synor::Precision::FP16)
    .processor(synor::ProcessorType::GPU)
    .priority(synor::Priority::High)
    .strategy(synor::Strategy::Speed)
    .execute();

// 2D Convolution
auto conv = client.conv2d(input, kernel)
    .stride(1, 1)
    .padding(1, 1)
    .execute();

// Attention
auto attention = client.attention(query, key, value)
    .numHeads(8)
    .flash(true)
    .execute();

Async API with std::future

#include <future>

auto future = client.matmul(a, b)
    .precision(synor::Precision::FP16)
    .executeAsync();

// Do other work...

auto result = future.get();

LLM Inference

// Single response
auto response = client.inference("llama-3-70b", "Explain quantum computing")
    .maxTokens(512)
    .temperature(0.7)
    .execute();

std::cout << response.result().value_or("") << "\n";

// Streaming with callback
client.inferenceStream("llama-3-70b", "Write a poem",
    [](std::string_view chunk) {
        std::cout << chunk << std::flush;
    });

Configuration

synor::Config config;
config.apiKey = "your-api-key";
config.baseUrl = "https://api.synor.io/compute/v1";
config.defaultProcessor = synor::ProcessorType::GPU;
config.defaultPrecision = synor::Precision::FP16;
config.timeout = std::chrono::seconds(30);
config.debug = true;

synor::Client client(config);

Error Handling

try {
    auto result = client.matmul(a, b).execute();
} catch (const synor::ApiError& e) {
    std::cerr << "API Error " << e.statusCode() << ": " << e.what() << "\n";
} catch (const synor::NetworkError& e) {
    std::cerr << "Network error: " << e.what() << "\n";
} catch (const synor::InvalidArgumentError& e) {
    std::cerr << "Invalid argument: " << e.what() << "\n";
}

// Or with std::expected (C++23)
auto result = client.matmul(a, b).tryExecute();
if (result) {
    std::cout << "Success!\n";
} else {
    std::cerr << "Error: " << result.error().message() << "\n";
}

Types

// Processor types
enum class ProcessorType {
    CPU, GPU, TPU, NPU, LPU, FPGA, Auto
};

// Precision
enum class Precision {
    FP64, FP32, FP16, BF16, INT8, INT4
};

// Job status
enum class JobStatus {
    Pending, Running, Completed, Failed, Cancelled
};

RAII Memory Management

All Synor objects use RAII:

{
    auto tensor = synor::Tensor::random({100, 100});
    auto result = client.matmul(tensor, tensor).execute();
} // Automatic cleanup

Move Semantics

Efficient moves for large tensors:

auto tensor = synor::Tensor::random({1000, 1000});
auto moved = std::move(tensor);  // No copy

Thread Safety

The client is thread-safe. Use shared_ptr for multi-threaded access:

auto client = std::make_shared<synor::Client>("your-api-key");

// Multiple threads can use client safely
std::thread t1([&client]() { client->matmul(a, b).execute(); });
std::thread t2([&client]() { client->matmul(c, d).execute(); });

Requirements

  • C++17 or later
  • CMake 3.16+
  • libcurl
  • nlohmann/json

Building

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .

Testing

cd build
ctest --output-on-failure

License

MIT