Ejemplo n.º 1
0
// create interpolation function name
std::string ASTTranslate::getInterpolationName(ASTContext &Ctx,
        hipacc::Builtin::Context &builtins, CompilerOptions &compilerOptions,
        HipaccKernel *Kernel, HipaccAccessor *Acc, border_variant bh_variant) {
    std::string name = "interpolate_";

    switch (Acc->getInterpolationMode()) {
    case Interpolate::NO:
    case Interpolate::NN:
        break;
    case Interpolate::LF:
        name += "lf_";
        break;
    case Interpolate::CF:
        name += "cf_";
        break;
    case Interpolate::L3:
        name += "l3_";
        break;
    }

    switch (compilerOptions.getTargetLang()) {
    case Language::C99:
    case Language::Renderscript:
    case Language::Filterscript:
        name += "gmem";
        break;
    case Language::CUDA:
        switch (Kernel->useTextureMemory(Acc)) {
        case Texture::None:
        case Texture::Ldg:
            name += "gmem";
            break;
        case Texture::Linear1D:
            name += "tex1D";
            break;
        case Texture::Linear2D:
        case Texture::Array2D:
            name += "tex2D";
            break;
        }
        break;
    case Language::OpenCLACC:
    case Language::OpenCLCPU:
    case Language::OpenCLGPU:
        switch (Kernel->useTextureMemory(Acc)) {
        case Texture::None:
        case Texture::Linear1D:
        case Texture::Linear2D:
        case Texture::Ldg:
            name += "gmem";
            break;
        case Texture::Array2D:
            name += "img";
            break;
        }
        break;
    }

    return name;
}
Ejemplo n.º 2
0
/// entry to our framework
int main(int argc, char *argv[]) {
  // first, print the Copyright notice
  printCopyright();

  // argument list for Driver after removing our compiler flags
  SmallVector<const char *, 16> args;
  CompilerOptions compilerOptions = CompilerOptions();
  std::string out;

  // parse command line options
  for (int i=0; i<argc; ++i) {
    if (StringRef(argv[i]) == "-emit-cpu") {
      compilerOptions.setTargetLang(Language::C99);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-cuda") {
      compilerOptions.setTargetLang(Language::CUDA);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-opencl-acc") {
      compilerOptions.setTargetLang(Language::OpenCLACC);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-opencl-cpu") {
      compilerOptions.setTargetLang(Language::OpenCLCPU);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-opencl-gpu") {
      compilerOptions.setTargetLang(Language::OpenCLGPU);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-renderscript") {
      compilerOptions.setTargetLang(Language::Renderscript);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-filterscript") {
      compilerOptions.setTargetLang(Language::Filterscript);
      compilerOptions.setPixelsPerThread(1);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-padding") {
      assert(i<(argc-1) && "Mandatory alignment parameter for -emit-padding switch missing.");
      std::istringstream buffer(argv[i+1]);
      int val;
      buffer >> val;
      if (buffer.fail()) {
        llvm::errs() << "ERROR: Expected alignment in bytes for -emit-padding switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      compilerOptions.setPadding(val);
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-target") {
      assert(i<(argc-1) && "Mandatory code name parameter for -target switch missing.");
      if (StringRef(argv[i+1]) == "Fermi-20") {
        compilerOptions.setTargetDevice(Device::Fermi_20);
      } else if (StringRef(argv[i+1]) == "Fermi-21") {
        compilerOptions.setTargetDevice(Device::Fermi_21);
      } else if (StringRef(argv[i+1]) == "Kepler-30") {
        compilerOptions.setTargetDevice(Device::Kepler_30);
      } else if (StringRef(argv[i+1]) == "Kepler-32") {
        compilerOptions.setTargetDevice(Device::Kepler_32);
      } else if (StringRef(argv[i+1]) == "Kepler-35") {
        compilerOptions.setTargetDevice(Device::Kepler_35);
      } else if (StringRef(argv[i+1]) == "Kepler-37") {
        compilerOptions.setTargetDevice(Device::Kepler_37);
      } else if (StringRef(argv[i+1]) == "Maxwell-50") {
        compilerOptions.setTargetDevice(Device::Maxwell_50);
      } else if (StringRef(argv[i+1]) == "Maxwell-52") {
        compilerOptions.setTargetDevice(Device::Maxwell_52);
      } else if (StringRef(argv[i+1]) == "Maxwell-53") {
        compilerOptions.setTargetDevice(Device::Maxwell_53);
      } else if (StringRef(argv[i+1]) == "Evergreen") {
        compilerOptions.setTargetDevice(Device::Evergreen);
      } else if (StringRef(argv[i+1]) == "NorthernIsland") {
        compilerOptions.setTargetDevice(Device::NorthernIsland);
      } else if (StringRef(argv[i+1]) == "Midgard") {
        compilerOptions.setTargetDevice(Device::Midgard);
      } else if (StringRef(argv[i+1]) == "KnightsCorner") {
        compilerOptions.setTargetDevice(Device::KnightsCorner);
      } else {
        llvm::errs() << "ERROR: Expected valid code name specification for -target switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-explore-config") {
      compilerOptions.setExploreConfig(USER_ON);
      continue;
    }
    if (StringRef(argv[i]) == "-use-config") {
      assert(i<(argc-1) && "Mandatory configuration specification for -use-config switch missing.");
      int x=0, y=0, ret=0;
      ret = sscanf(argv[i+1], "%dx%d", &x, &y);
      if (ret!=2) {
        llvm::errs() << "ERROR: Expected valid configuration specification for -use-config switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      compilerOptions.setKernelConfig(x, y);
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-time-kernels") {
      compilerOptions.setTimeKernels(USER_ON);
      continue;
    }
    if (StringRef(argv[i]) == "-use-textures") {
      assert(i<(argc-1) && "Mandatory texture memory specification for -use-textures switch missing.");
      if (StringRef(argv[i+1]) == "off") {
        compilerOptions.setTextureMemory(Texture::None);
      } else if (StringRef(argv[i+1]) == "Linear1D") {
        compilerOptions.setTextureMemory(Texture::Linear1D);
      } else if (StringRef(argv[i+1]) == "Linear2D") {
        compilerOptions.setTextureMemory(Texture::Linear2D);
      } else if (StringRef(argv[i+1]) == "Array2D") {
        compilerOptions.setTextureMemory(Texture::Array2D);
      } else if (StringRef(argv[i+1]) == "Ldg") {
        compilerOptions.setTextureMemory(Texture::Ldg);
      } else {
        llvm::errs() << "ERROR: Expected valid texture memory specification for -use-textures switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-use-local") {
      assert(i<(argc-1) && "Mandatory local memory specification for -use-local switch missing.");
      if (StringRef(argv[i+1]) == "off") {
        compilerOptions.setLocalMemory(USER_OFF);
      } else if (StringRef(argv[i+1]) == "on") {
        compilerOptions.setLocalMemory(USER_ON);
      } else {
        llvm::errs() << "ERROR: Expected valid local memory specification for -use-local switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-vectorize") {
      assert(i<(argc-1) && "Mandatory vectorization specification for -vectorize switch missing.");
      if (StringRef(argv[i+1]) == "off") {
        compilerOptions.setVectorizeKernels(USER_OFF);
      } else if (StringRef(argv[i+1]) == "on") {
        compilerOptions.setVectorizeKernels(USER_ON);
      } else {
        llvm::errs() << "ERROR: Expected valid vectorization specification for -use-vectorize switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-pixels-per-thread") {
      assert(i<(argc-1) && "Mandatory integer parameter for -pixels-per-thread switch missing.");
      std::istringstream buffer(argv[i+1]);
      int val;
      buffer >> val;
      if (buffer.fail()) {
        llvm::errs() << "ERROR: Expected integer parameter for -pixels-per-thread switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      compilerOptions.setPixelsPerThread(val);
      ++i;
      continue;
    }
Ejemplo n.º 3
0
/// entry to our framework
int main(int argc, char *argv[]) {
  // first, print the Copyright notice
  printCopyright();

  // get stack trace on SegFaults
  llvm::sys::PrintStackTraceOnErrorSignal();
  llvm::PrettyStackTraceProgram X(argc, argv);

  // argument list for CompilerInvocation after removing our compiler flags
  SmallVector<const char *, 16> Args;
  CompilerOptions compilerOptions = CompilerOptions();

  // support exceptions
  Args.push_back("-fexceptions");

  // parse command line options
  for (int i=1; i<argc; ++i) {
    if (StringRef(argv[i]) == "-emit-cpu") {
      compilerOptions.setTargetCode(TARGET_C);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-cuda") {
      compilerOptions.setTargetCode(TARGET_CUDA);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-opencl-acc") {
      compilerOptions.setTargetCode(TARGET_OpenCLACC);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-opencl-cpu") {
      compilerOptions.setTargetCode(TARGET_OpenCLCPU);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-opencl-gpu") {
      compilerOptions.setTargetCode(TARGET_OpenCLGPU);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-renderscript") {
      compilerOptions.setTargetCode(TARGET_Renderscript);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-filterscript") {
      compilerOptions.setTargetCode(TARGET_Filterscript);
      compilerOptions.setPixelsPerThread(1);
      continue;
    }
    if (StringRef(argv[i]) == "-emit-padding") {
      assert(i<(argc-1) && "Mandatory alignment parameter for -emit-padding switch missing.");
      std::istringstream buffer(argv[i+1]);
      int val;
      buffer >> val;
      if (buffer.fail()) {
        llvm::errs() << "ERROR: Expected alignment in bytes for -emit-padding switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      compilerOptions.setPadding(val);
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-target") {
      assert(i<(argc-1) && "Mandatory code name parameter for -target switch missing.");
      if (StringRef(argv[i+1]) == "Tesla-10") {
        compilerOptions.setTargetDevice(TESLA_10);
      } else if (StringRef(argv[i+1]) == "Tesla-11") {
        compilerOptions.setTargetDevice(TESLA_11);
      } else if (StringRef(argv[i+1]) == "Tesla-12") {
        compilerOptions.setTargetDevice(TESLA_12);
      } else if (StringRef(argv[i+1]) == "Tesla-13") {
        compilerOptions.setTargetDevice(TESLA_13);
      } else if (StringRef(argv[i+1]) == "Fermi-20") {
        compilerOptions.setTargetDevice(FERMI_20);
      } else if (StringRef(argv[i+1]) == "Fermi-21") {
        compilerOptions.setTargetDevice(FERMI_21);
      } else if (StringRef(argv[i+1]) == "Kepler-30") {
        compilerOptions.setTargetDevice(KEPLER_30);
      } else if (StringRef(argv[i+1]) == "Kepler-35") {
        compilerOptions.setTargetDevice(KEPLER_35);
      } else if (StringRef(argv[i+1]) == "Evergreen") {
        compilerOptions.setTargetDevice(EVERGREEN);
      } else if (StringRef(argv[i+1]) == "NorthernIsland") {
        compilerOptions.setTargetDevice(NORTHERN_ISLAND);
      } else if (StringRef(argv[i+1]) == "Midgard") {
        compilerOptions.setTargetDevice(MIDGARD);
      } else if (StringRef(argv[i+1]) == "KnightsCorner") {
        compilerOptions.setTargetDevice(KNIGHTSCORNER);
      } else {
        llvm::errs() << "ERROR: Expected valid code name specification for -target switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-explore-config") {
      compilerOptions.setExploreConfig(USER_ON);
      continue;
    }
    if (StringRef(argv[i]) == "-use-config") {
      assert(i<(argc-1) && "Mandatory configuration specification for -use-config switch missing.");
      int x=0, y=0, ret=0;
      ret = sscanf(argv[i+1], "%dx%d", &x, &y);
      if (ret!=2) {
        llvm::errs() << "ERROR: Expected valid configuration specification for -use-config switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      compilerOptions.setKernelConfig(x, y);
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-time-kernels") {
      compilerOptions.setTimeKernels(USER_ON);
      continue;
    }
    if (StringRef(argv[i]) == "-use-textures") {
      assert(i<(argc-1) && "Mandatory texture memory specification for -use-textures switch missing.");
      if (StringRef(argv[i+1]) == "off") {
        compilerOptions.setTextureMemory(NoTexture);
      } else if (StringRef(argv[i+1]) == "Linear1D") {
        compilerOptions.setTextureMemory(Linear1D);
      } else if (StringRef(argv[i+1]) == "Linear2D") {
        compilerOptions.setTextureMemory(Linear2D);
      } else if (StringRef(argv[i+1]) == "Array2D") {
        compilerOptions.setTextureMemory(Array2D);
      } else if (StringRef(argv[i+1]) == "Ldg") {
        compilerOptions.setTextureMemory(Ldg);
      } else {
        llvm::errs() << "ERROR: Expected valid texture memory specification for -use-textures switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-use-local") {
      assert(i<(argc-1) && "Mandatory local memory specification for -use-local switch missing.");
      if (StringRef(argv[i+1]) == "off") {
        compilerOptions.setLocalMemory(USER_OFF);
      } else if (StringRef(argv[i+1]) == "on") {
        compilerOptions.setLocalMemory(USER_ON);
      } else {
        llvm::errs() << "ERROR: Expected valid local memory specification for -use-local switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-vectorize") {
      assert(i<(argc-1) && "Mandatory vectorization specification for -vectorize switch missing.");
      if (StringRef(argv[i+1]) == "off") {
        compilerOptions.setVectorizeKernels(USER_OFF);
      } else if (StringRef(argv[i+1]) == "on") {
        compilerOptions.setVectorizeKernels(USER_ON);
      } else {
        llvm::errs() << "ERROR: Expected valid vectorization specification for -use-vectorize switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      ++i;
      continue;
    }
    if (StringRef(argv[i]) == "-pixels-per-thread") {
      assert(i<(argc-1) && "Mandatory integer parameter for -pixels-per-thread switch missing.");
      std::istringstream buffer(argv[i+1]);
      int val;
      buffer >> val;
      if (buffer.fail()) {
        llvm::errs() << "ERROR: Expected integer parameter for -pixels-per-thread switch.\n\n";
        printUsage();
        return EXIT_FAILURE;
      }
      compilerOptions.setPixelsPerThread(val);
      ++i;
      continue;
    }