long N = 2000; long iterMax = 100; long chunksize = -1; bool isHelp = false; bool disableCheck = false; boost::program_options::options_description opts("Wavefront Options"); opts.add_options() ("help", "Print help message.") ("itermax", boost::program_options::value(), "Iteration count.") ("n", boost::program_options::value(), "Array size (n+1 x n+1).") ("chunksize", boost::program_options::value(), "Chunk size.") ("disable-check", "Don't check for correctness."); boost::program_options::variables_map vm; auto parsed = boost::program_options::command_line_parser(argc, argv).options(opts).allow_unregistered().run(); boost::program_options::store(parsed, vm); boost::program_options::notify(vm); if (vm.count("help")) { std::cerr << opts << std::endl; isHelp = true; } else { if (vm.count("itermax")) { iterMax = vm["itermax"].as(); } if (vm.count("n")) { N = vm["n"].as(); } if (vm.count("chunksize")) { chunksize = vm["chunksize"].as(); } if (vm.count("disable-check")) { disableCheck = true; } } long _2N2 = 2*N-2; if (chunksize <= 0) { chunksize = (_2N2/8)+1; } if (!isHelp) { std::cerr << "itermax = " << iterMax << std::endl; std::cerr << "N = " << N << std::endl; std::cerr << "chunksize = " << chunksize << std::endl; if (disableCheck) { std::cerr << "disableCheck = true" << std::endl; } else { std::cerr << "disableCheck = false" << std::endl; } } wfInput.iterMax.setValue(iterMax); wfInput.N.setValue(N); wfInput._2N2.setValue(_2N2); wfInput.chunksize.setValue(chunksize); #define Idx2D(x, y) (x)*(N+1)+(y) double* mat_a = (double*)malloc(sizeof(double)*(N+1)*(N+1)); double* mat_b = (double*)malloc(sizeof(double)*(N+1)*(N+1)); //srand(time(NULL)); srand(20); for(int i=0; i