code: def main():
      """Runs benchmarks and saves if path is provided"""
      crypten.init()
      args = get_args()
      device = torch.device(args.device)
  
      if not hasattr(crypten.nn.Module, "to") or not hasattr(
          crypten.mpc.MPCTensor, "to"
      ):
          if device.type == "cuda":
              print(
                  "GPU computation is not supported for this version of CrypTen, benchmark will be skipped"
              )
              return
  
      benchmarks = [
          FuncBenchmarks(device=device),
          ModelBenchmarks(
              device=device, advanced_models=args.advanced_models
          ),
      ]
  
      if args.only_functions:
          benchmarks = [FuncBenchmarks(device=device)]
  
      if args.world_size > 1:
          if args.ttp:
              crypten.mpc.set_default_provider(
                  crypten.mpc.provider.TrustedThirdParty
              )
          launcher = multiprocess_launcher.MultiProcessLauncher(
              args.world_size, multiprocess_caller, fn_args=args
          )
          launcher.start()
          launcher.join()
          launcher.terminate()
  
      else:
          pd.set_option("display.precision", 3)
          for benchmark in benchmarks:
              benchmark.run()
              print(benchmark)
              if args.path:
                  benchmark.save(args.path)
  
imports: import argparse
  import functools
  import os
  import timeit
  from collections import namedtuple
  import crypten
  import crypten.communicator
  import numpy
  import pandas
  import torch
  from examples import multiprocess_launcher
label_desc: Use image node_id 4 for calling a global function with example usage: main() without return types