make set_kernel and set_kernel_args virtual