OpenVector
  • OpenVector
  • Introduction
    • Our Thesis
    • Our Solution
    • Other Approaches
    • Benchmarks
  • Network Architecture
    • Overview
    • Networking
    • Deploy Compute Node
    • Deploy CoFHE Node
    • Deploy Client Node
  • Quick start
    • Overview
    • Setting up Client Node
    • Encrypting Data
    • Tensor Multiplication
    • Decrypting the Ouput
    • Verifying the Output
    • Running the Program
  • Tutorials
    • Building MLP Block
  • Use Cases
    • Confidential LLM Inference
    • Training on Encrypted Data
    • Vector Search on Encrypted Data
    • Encrypted Data Access Control
  • API references
    • CryptoSystem Interface
    • ClientNode Class
    • ComputeRequest Class
    • ComputeResponse Class
  • PYTHON API REFERENCES
    • Overview
    • Tensor
    • nn.Module
    • nn.Functional
  • Contribution
    • Call for Research
    • CoFHE Library
Powered by GitBook
On this page
  1. Quick start

Tensor Multiplication

In this article we continue our quick start series. We assume that you are following from the previous article.

5. Create a Compute Request for Matrix Multiplication

We will create a ComputeRequest to perform homomorphic matrix multiplication.

    // Create operands for the compute request
    ComputeRequest::ComputeOperationOperand operand1(
        ComputeRequest::DataType::TENSOR,
        ComputeRequest::DataEncrytionType::CIPHERTEXT,
        serialized_ct1
    );

    ComputeRequest::ComputeOperationOperand operand2(
        ComputeRequest::DataType::TENSOR,
        ComputeRequest::DataEncrytionType::CIPHERTEXT,
        serialized_ct2
    );

    // Define the compute operation instance
    ComputeRequest::ComputeOperationInstance operation(
        ComputeRequest::ComputeOperationType::BINARY,
        ComputeRequest::ComputeOperation::MULTIPLY,
        { operand1, operand2 }
    );

    // Create the compute request
    ComputeRequest req(operation);

Explanation:

  • We create two ComputeOperationOperand objects representing the serialized tensors.

  • We specify that the data type is TENSOR and the encryption type is CIPHERTEXT.

  • We define a ComputeOperationInstance for the multiplication operation with two operands.

  • The ComputeRequest is created with this operation instance.

6. Send the Compute Request and Receive the Response

We send the request to the network and receive the encrypted result.

    // Measure the start time
    auto start = std::chrono::high_resolution_clock::now();

    // Perform the computation
    ComputeResponse* res = nullptr;
    client_node.compute(req, &res);

    // Measure the end time
    auto stop = std::chrono::high_resolution_clock::now();

    // Check if the computation was successful
    if (res && res->status() == ComputeResponse::Status::OK) {
        std::cout << "Encrypted result tensor received." << std::endl;
    } else {
        std::cerr << "Computation failed." << std::endl;
        return 1;
    }

Explanation:

  • We measure the time before and after the computation to calculate the duration.

  • The compute method sends the request and populates the res pointer with the response.

  • We check the status of the response to ensure the computation was successful.

PreviousEncrypting DataNextDecrypting the Ouput

Last updated 6 months ago