code: def compile_and_benchmark(self, gpu_args, params, kernel_options, tuning_options):
          
  
          instance_string = util.get_instance_string(params)
  
          logging.debug('compile_and_benchmark ' + instance_string)
          mem_usage = round(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024.0, 1)
          logging.debug('Memory usage : %2.2f MB', mem_usage)
  
          verbose = tuning_options.verbose
  
          instance = self.create_kernel_instance(kernel_options, params, verbose)
          if instance is None:
              return None
  
          try:
              #compile the kernel
              func = self.compile_kernel(instance, verbose)
              if func is None:
                  return None
  
              #add constant memory arguments to compiled module
              if kernel_options.cmem_args is not None:
                  self.dev.copy_constant_memory_args(kernel_options.cmem_args)
              #add texture memory arguments to compiled module
              if kernel_options.texmem_args is not None:
                  self.dev.copy_texture_memory_args(kernel_options.texmem_args)
  
              #test kernel for correctness and benchmark
              if tuning_options.answer is not None:
                  self.check_kernel_output(func, gpu_args, instance, tuning_options.answer, tuning_options.atol, tuning_options.verify, verbose)
  
              #benchmark
              time = self.benchmark(func, gpu_args, instance, tuning_options.times, verbose)
  
          except Exception as e:
              #dump kernel_string to temp file
              temp_filename = util.get_temp_filename(suffix=".c")
              util.write_file(temp_filename, instance.kernel_string)
              print("Error while compiling or benchmarking, see source files: " + temp_filename + " ".join(instance.temp_files.values()))
              raise e
  
          #clean up any temporary files, if no error occured
          for v in instance.temp_files.values():
              util.delete_temp_file(v)
  
          return time
docs: Compile and benchmark a kernel instance based on kernel strings and parameters