synor/sdk/c
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 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)

Manual Installation

git clone https://github.com/synor/compute-sdk-c
cd compute-sdk-c
mkdir build && cd build
cmake ..
make
sudo make install

Quick Start

#include <synor_compute.h>
#include <stdio.h>

int main() {
    // Initialize client
    synor_client_t* client = synor_client_create("your-api-key");
    if (!client) {
        fprintf(stderr, "Failed to create client\n");
        return 1;
    }

    // Create tensors
    size_t shape[] = {512, 512};
    synor_tensor_t* a = synor_tensor_random(shape, 2, SYNOR_FP32);
    synor_tensor_t* b = synor_tensor_random(shape, 2, SYNOR_FP32);

    // Matrix multiplication on GPU
    synor_matmul_options_t opts = {
        .precision = SYNOR_FP16,
        .processor = SYNOR_PROCESSOR_GPU,
        .priority = SYNOR_PRIORITY_NORMAL
    };

    synor_result_t* result = synor_matmul(client, a, b, &opts);
    if (result && result->status == SYNOR_STATUS_COMPLETED) {
        printf("Time: %ldms\n", result->execution_time_ms);
        printf("Cost: $%.6f\n", result->cost);
    }

    // Cleanup
    synor_result_free(result);
    synor_tensor_free(a);
    synor_tensor_free(b);
    synor_client_free(client);

    return 0;
}

Tensor Operations

// Create tensors
size_t shape[] = {3, 3};
synor_tensor_t* zeros = synor_tensor_zeros(shape, 2, SYNOR_FP32);
synor_tensor_t* ones = synor_tensor_ones(shape, 2, SYNOR_FP32);
synor_tensor_t* random = synor_tensor_random(shape, 2, SYNOR_FP32);

// From data
float data[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
size_t data_shape[] = {2, 3};
synor_tensor_t* tensor = synor_tensor_create(data, 6, data_shape, 2, SYNOR_FP32);

// Get tensor info
size_t ndim = synor_tensor_ndim(tensor);
size_t size = synor_tensor_size(tensor);
const size_t* tensor_shape = synor_tensor_shape(tensor);

// Get data pointer
const float* tensor_data = synor_tensor_data(tensor);

Matrix Operations

// Matrix multiplication
synor_matmul_options_t matmul_opts = {
    .precision = SYNOR_FP16,
    .processor = SYNOR_PROCESSOR_GPU
};
synor_result_t* result = synor_matmul(client, a, b, &matmul_opts);

// 2D Convolution
synor_conv2d_options_t conv_opts = {
    .stride_h = 1, .stride_w = 1,
    .padding_h = 1, .padding_w = 1,
    .precision = SYNOR_FP32
};
synor_result_t* conv = synor_conv2d(client, input, kernel, &conv_opts);

// Attention
synor_attention_options_t attn_opts = {
    .num_heads = 8,
    .flash = true,
    .precision = SYNOR_FP16
};
synor_result_t* attn = synor_attention(client, query, key, value, &attn_opts);

LLM Inference

// Single response
synor_inference_options_t opts = {
    .max_tokens = 512,
    .temperature = 0.7f,
    .top_p = 0.9f
};
synor_inference_result_t* response = synor_inference(
    client, "llama-3-70b", "Explain quantum computing", &opts
);
if (response) {
    printf("%s\n", response->result);
    synor_inference_result_free(response);
}

// Streaming with callback
void on_chunk(const char* chunk, void* user_data) {
    printf("%s", chunk);
    fflush(stdout);
}

synor_inference_stream(client, "llama-3-70b", "Write a poem",
    &opts, on_chunk, NULL);

Configuration

synor_config_t config = {
    .api_key = "your-api-key",
    .base_url = "https://api.synor.io/compute/v1",
    .default_processor = SYNOR_PROCESSOR_GPU,
    .default_precision = SYNOR_FP16,
    .timeout_secs = 30,
    .debug = false
};

synor_client_t* client = synor_client_create_with_config(&config);

Error Handling

synor_result_t* result = synor_matmul(client, a, b, &opts);

if (!result) {
    const char* error = synor_get_last_error();
    fprintf(stderr, "Error: %s\n", error);
} else if (result->status == SYNOR_STATUS_FAILED) {
    fprintf(stderr, "Job failed: %s\n", result->error_message);
}

// Check for specific errors
synor_error_t err = synor_get_error_code();
switch (err) {
    case SYNOR_ERROR_NETWORK:
        fprintf(stderr, "Network error\n");
        break;
    case SYNOR_ERROR_AUTH:
        fprintf(stderr, "Authentication failed\n");
        break;
    case SYNOR_ERROR_INVALID_ARG:
        fprintf(stderr, "Invalid argument\n");
        break;
}

Types

// Processor types
typedef enum {
    SYNOR_PROCESSOR_CPU,
    SYNOR_PROCESSOR_GPU,
    SYNOR_PROCESSOR_TPU,
    SYNOR_PROCESSOR_NPU,
    SYNOR_PROCESSOR_LPU,
    SYNOR_PROCESSOR_FPGA,
    SYNOR_PROCESSOR_AUTO
} synor_processor_t;

// Precision
typedef enum {
    SYNOR_FP64,
    SYNOR_FP32,
    SYNOR_FP16,
    SYNOR_BF16,
    SYNOR_INT8,
    SYNOR_INT4
} synor_precision_t;

// Job status
typedef enum {
    SYNOR_STATUS_PENDING,
    SYNOR_STATUS_RUNNING,
    SYNOR_STATUS_COMPLETED,
    SYNOR_STATUS_FAILED,
    SYNOR_STATUS_CANCELLED
} synor_status_t;

Memory Management

All Synor objects must be freed:

synor_tensor_free(tensor);
synor_result_free(result);
synor_inference_result_free(response);
synor_client_free(client);

Thread Safety

The client is thread-safe. Each thread can share the same client instance.

Requirements

  • C99 or later
  • libcurl for HTTP
  • OpenSSL for TLS

Building

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

Testing

cd build
ctest

License

MIT