static void listDevices() { ComputeDeviceRepository repository; const std::vector<ComputeDevice> & repo = repository.getComputeDevices(); std::cout << "Available compute devices:" << std::endl; for(int i = 0; i < repo.size(); i++) { const ComputeDevice & device = repo.at(i); std::cout << " " << i << ": " << device.getName() << " (CC " << device.getComputeCapability() << ", " << "Mem " << (int)qRound(device.getGlobalMemoryKB() / 1024.f) << "Mib, " << "Clock " << (int)qRound(device.getClockFrequencyKHz() / 1000.0f) << "Mhz)" << std::endl; } }
int main(int argc, char **argv) { QCoreApplication app(argc, argv); QCoreApplication::setApplicationName("Problemsolver"); QCoreApplication::setApplicationVersion("0.0.1"); QCommandLineParser parser; parser.setApplicationDescription("Problem Problem solver using OptiX."); parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument("source", "Problem definition input file."); QCommandLineOption deviceOption(QStringList() << "d" << "device", "Device number id. Use -l to list devices.", "device", "0"); QCommandLineOption listOption(QStringList() << "l" << "list", "List present CUDA devices in the machine."); parser.addOption(deviceOption); parser.addOption(listOption); parser.process(app); const QStringList args = parser.positionalArguments(); if(args.isEmpty()) { std::cerr << "Missing source parameter" << std::endl; parser.showHelp(1); } QString inputPath = args.first(); if(parser.isSet(listOption)) // -l, then list available devices. { listDevices(); exit(0); } // parse -d option bool parseOk; int deviceNumber = parser.value(deviceOption).toInt(&parseOk); if(!parseOk) { std::cerr << "Expect a number for device option." << std::endl; parser.showHelp(1); } if(deviceNumber < 0) { std::cerr << "Option --device(-d) can't be negative." << std::endl; parser.showHelp(1); } // find and check selected device ComputeDeviceRepository repository; const std::vector<ComputeDevice> & repo = repository.getComputeDevices(); if(repo.empty()) { std::cerr << "No computing device found" "You must have a CUDA enabled GPU to run this application. " "The CUDA GPUs nVidia developer page(https://developer.nvidia.com/cuda-gpus) has a " "list of all supported devices." << std::endl; exit(1); } if(deviceNumber >= repo.size()) { std::cerr << "Invalid device number " << deviceNumber << "." << std::endl << "Try -l to list available computing devices." << std::endl; exit(1); } ComputeDevice device = repo.at(deviceNumber); // Task parented to the application so that it // will be deleted by the application. Main *main = new Main(&app, inputPath, device); // This will cause the application to exit when // the task signals finished. QObject::connect(main, SIGNAL(finished()), &app, SLOT(quit())); // This will run the task from the application event loop. QTimer::singleShot(0, main, SLOT(run())); return app.exec(); }
int main( int argc, char** argv ) { QApplication qApplication(argc, argv); qApplication.setOrganizationName("Opposite Renderer"); qApplication.setApplicationName("Opposite Renderer"); QTextStream out(stdout); QTextStream in(stdin); try { ComputeDeviceRepository repository; const std::vector<ComputeDevice> & repo = repository.getComputeDevices(); if(repo.empty()) { out << "You must have a CUDA enabled GPU to run this application." << endl << "Press ENTER to quit." << endl; in.read(1); return 1; } out << "Available compute devices:" << endl; for(int i = 0; i < repo.size(); i++) { const ComputeDevice & device = repo.at(i); out << " " << i << ": " << device.getName() << " (CC " << device.getComputeCapability() << " PCI Bus "<< device.getPCIBusId() <<")" << endl; } int deviceNumber = repo.size() == 1 ? 0 : -1; while (deviceNumber >= repo.size() || deviceNumber < 0) { out << "Select 0-" << repo.size()-1 << ":" << endl; in >> deviceNumber; } out << deviceNumber << endl; ComputeDevice device = repo.at(deviceNumber); StandaloneApplication application = StandaloneApplication(qApplication, device); // Run application QThread* applicationThread = new QThread(&qApplication); application.moveToThread(applicationThread); applicationThread->start(); MainWindowBase mainWindow(application); mainWindow.showMaximized(); int returnCode = qApplication.exec(); application.wait(); applicationThread->quit(); applicationThread->wait(); return returnCode; } catch(const std::exception & E) { QMessageBox::warning(NULL, "Exception Thrown During Launch of Standalone", E.what()); return -1; } }
int main( int argc, char** argv ) { QApplication qApplication(argc, argv); qApplication.setOrganizationName("Opposite Renderer"); qApplication.setApplicationName("Opposite Renderer"); //attachConEmu(); QTextStream out(stdout); QTextStream in(stdin); //setvbuf(stdout, NULL, _IONBF, NULL); // vmarz: disable output stream buffering, otherwise printf output doesn't show up consistently //setvbuf(stderr, NULL, _IONBF, NULL); try { ComputeDeviceRepository repository; const std::vector<ComputeDevice> & repo = repository.getComputeDevices(); if(repo.empty()) { out << "You must have a CUDA enabled GPU to run this application." << endl << "Press ENTER to quit." << endl; in.read(1); return 1; } out << "Available compute devices:" << endl; for(int i = 0; i < repo.size(); i++) { const ComputeDevice & device = repo.at(i); out << " " << i << ": " << device.getName() << " (CC " << device.getComputeCapability() << " PCI Bus "<< device.getPCIBusId() <<")" << endl; } int deviceNumber = repo.size() == 1 ? 0 : -1; while (deviceNumber >= repo.size() || deviceNumber < 0) { out << "Select 0-" << repo.size()-1 << ":" << endl; in >> deviceNumber; } out << "Using device: " << deviceNumber << endl; ComputeDevice device = repo.at(deviceNumber); StandaloneApplication application = StandaloneApplication(qApplication, device); // Run application QThread* applicationThread = new QThread(&qApplication); applicationThread->setObjectName("QThread::Application"); application.moveToThread(applicationThread); applicationThread->start(); MainWindowBase mainWindow(application); //mainWindow.showMaximized(); mainWindow.show(); mainWindow.resize(1150,700); // vmarz: start render manager after MainWindow initialization when all signals/slots hooked up application.startRenderManager(); int returnCode = qApplication.exec(); application.wait(); applicationThread->quit(); applicationThread->wait(); return returnCode; } catch(const std::exception & E) { QMessageBox::warning(NULL, "Exception Thrown During Launch of Standalone", E.what()); return -1; } }