C and cuda implementation