GCA Quickstart
Get your first compute kernel running on Gridworkz using only open-source tools.
Coming soon
The simulator, gcacc compiler and runtime are not published yet. make sim currently prints a status message. This page shows what the workflow will look like.
Prerequisites
sudo apt-get updatesudo apt-get install -y clang-18 llvm-18 verilator build-essential git python3-pipClone and build
git clone https://github.com/gridworkz/gridworkz-core.gitcd gridworkz-coremake sim TARGET=verilator WORKLOAD=photonic_matmul_64Your first kernel: vector_add.gca
GCA uses C++ syntax, with execution mapped onto the RISC-V, NPU and photonic blocks.
#include <gca.h>
__global__ void vectorAdd(float* A, float* B, float* C, int N) { int idx = gca_blockIdx_x * gca_blockDim_x + gca_threadIdx_x; if (idx < N) C[idx] = A[idx] + B[idx];}
int main() { int N = 1024; size_t size = N * sizeof(float); float *h_A = (float*)malloc(size), *h_B = (float*)malloc(size), *h_C = (float*)malloc(size);
float *d_A, *d_B, *d_C; gcaMalloc((void**)&d_A, size); gcaMalloc((void**)&d_B, size); gcaMalloc((void**)&d_C, size);
gcaMemcpy(d_A, h_A, size, gcaMemcpyHostToDevice); gcaMemcpy(d_B, h_B, size, gcaMemcpyHostToDevice);
int threads = 256, blocks = (N + threads - 1) / threads; vectorAdd<<<blocks, threads>>>(d_A, d_B, d_C, N);
gcaDeviceSynchronize(); gcaMemcpy(h_C, d_C, size, gcaMemcpyDeviceToHost); gcaFree(d_A); gcaFree(d_B); gcaFree(d_C); return 0;}Compile and run in simulation
gcacc vector_add.gca -o vector_add --target=sim_verilator./vector_add