Get Started

Install cuPQC and compile your first device-side kernel, from SDK download through link-time optimization. Prerequisites are on the right; full guides and sample applications are linked below.

1 · Download and extract
wget https://developer.download.nvidia.com/compute/cupqc/redist/cupqc/cupqc-sdk-0.4.1-x86_64.tar.gz
tar -xzf cupqc-sdk-0.4.1-x86_64.tar.gz
wget https://developer.download.nvidia.com/compute/cupqc/redist/cupqc/cupqc-sdk-0.4.1-aarch64.tar.gz
tar -xzf cupqc-sdk-0.4.1-aarch64.tar.gz
2 · Configure the SDK path

Set CUPQC_SDK_DIR to the extracted directory so your builds find the headers and libraries.

export CUPQC_SDK_DIR=/path/to/cupqc-sdk-0.4.1-x86_64

If unset, applications look for the SDK at /usr/local/cupqc-sdk. Add the export to your shell profile to make it persistent.

3 · Verify the install

Check that the SDK headers are in place.

ls $CUPQC_SDK_DIR/include/cupqc/
# pk.hpp  hash.hpp  database.hpp  operators.hpp  ...
4 · Use it in a CUDA kernel

cuPQC is device-side: include a header, declare a descriptor, and call it inside your kernel. Here is SHA-256 over a message:

#include <hash.hpp>
using namespace cupqc;

using SHA256 = decltype(SHA2_256() + Thread());

__global__ void hash_kernel(uint8_t* digest,
                            const uint8_t* msg, size_t len) {
    SHA256 hash {};
    if (threadIdx.x == 0) {
        hash.reset();
        hash.update(msg, len);
        hash.finalize();
        hash.digest(digest, SHA256::digest_size);
    }
}
5 · Compile with LTO

The SDK uses link-time optimization. Build with -dlto and your GPU architecture (sm_70 through sm_90).

nvcc -std=c++17 -dlto -arch=sm_90 \
     -I$CUPQC_SDK_DIR/include \
     -L$CUPQC_SDK_DIR/lib -lcupqc-hash \
     your_program.cu -o your_program

Prefer CMake? The SDK ships config files — use find_package(cupqc) and link cupqc-hash_static or cupqc-pk_static.