Program Listing for File addition.cuh
↰ Return to documentation for file (src/include/heongpu/kernel/addition.cuh)
// Copyright 2024-2026 Alişah Özcan
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// Developer: Alişah Özcan
#ifndef HEONGPU_ADDITION_H
#define HEONGPU_ADDITION_H
#include <curand_kernel.h>
#include "gpuntt/common/modular_arith.cuh"
namespace heongpu
{
// Homomorphic Addition Kernel
__global__ void addition(Data64* in1, Data64* in2, Data64* out,
Modulus64* modulus, int n_power);
// Homomorphic Substraction Kernel
__global__ void substraction(Data64* in1, Data64* in2, Data64* out,
Modulus64* modulus, int n_power);
// Homomorphic Negation Kernel
__global__ void negation(Data64* in1, Data64* out, Modulus64* modulus,
int n_power);
// Homomorphic Plaintext Addition Kernel(BFV)
__global__ void addition_plain_bfv_poly(Data64* cipher, Data64* plain,
Data64* output, Modulus64* modulus,
Modulus64 plain_mod, Data64 Q_mod_t,
Data64 upper_threshold,
Data64* coeffdiv_plain,
int n_power);
// Homomorphic Plaintext Substraction Kernel(BFV)
__global__ void
substraction_plain_bfv_poly(Data64* cipher, Data64* plain, Data64* output,
Modulus64* modulus, Modulus64 plain_mod,
Data64 Q_mod_t, Data64 upper_threshold,
Data64* coeffdiv_plain, int n_power);
// Homomorphic Plaintext Addition Kernel(BFV)
__global__ void addition_plain_bfv_poly_inplace(
Data64* cipher, Data64* plain, Data64* output, Modulus64* modulus,
Modulus64 plain_mod, Data64 Q_mod_t, Data64 upper_threshold,
Data64* coeffdiv_plain, int n_power);
// Homomorphic Plaintext Substraction Kernel(BFV)
__global__ void substraction_plain_bfv_poly_inplace(
Data64* cipher, Data64* plain, Data64* output, Modulus64* modulus,
Modulus64 plain_mod, Data64 Q_mod_t, Data64 upper_threshold,
Data64* coeffdiv_plain, int n_power);
// Homomorphic Plaintext Addition Kernel(CKKS)
__global__ void addition_plain_ckks_poly(Data64* in1, Data64* in2,
Data64* out, Modulus64* modulus,
int n_power);
// Homomorphic Plaintext Substraction Kernel(CKKS)
__global__ void substraction_plain_ckks_poly(Data64* in1, Data64* in2,
Data64* out,
Modulus64* modulus,
int n_power);
__global__ void addition_constant_plain_ckks_poly(Data64* in1, double in2,
Data64* out,
Modulus64* modulus,
double two_pow_64,
int n_power);
__global__ void
substraction_constant_plain_ckks_poly(Data64* in1, double in2, Data64* out,
Modulus64* modulus, double two_pow_64,
int n_power);
__global__ void set_zero_cipher_ckks_poly(Data64* in1, Modulus64* modulus,
int n_power);
} // namespace heongpu
#endif // HEONGPU_ADDITION_H