| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | /* * This file is part of the StarPU Handbook. * Copyright (C) 2009--2011  Universit@'e de Bordeaux * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS * Copyright (C) 2011, 2012 INRIA * See the file version.doxy for copying conditions. *//*! \page SimGridSupport SimGrid SupportStarPU can use Simgrid in order to simulate execution on an arbitraryplatform.\section Preparing Preparing your application for simulation.There are a few technical details which need to be handled for an application tobe simulated through Simgrid.If the application uses <c>gettimeofday</c> to make itsperformance measurements, the real time will be used, which will be bogus. Toget the simulated time, it has to use starpu_timing_now() which returns thevirtual timestamp in us.For some technical reason, the application's .c file which contains main() hasto be recompiled with starpu_simgrid_wrap.h, which in the simgrid case will # define main()into starpu_main(), and it is libstarpu which will provide the real main() andwill call the application's main().To be able to test with crazy data sizes, one may want to only allocateapplication data if STARPU_SIMGRID is not defined.  Passing a NULL pointer tostarpu_data_register functions is fine, data will never be read/written to byStarPU in Simgrid mode anyway.To be able to run the application with e.g. CUDA simulation on a system whichdoes not have CUDA installed, one can fill the cuda_funcs with (void*)1, toexpress that there is a CUDA implementation, even if one does not actuallyprovide it. StarPU will never actually run it in Simgrid mode anyway.\section Calibration CalibrationThe idea is to first compile StarPU normally, and run the application,so as to automatically benchmark the bus and the codelets.\verbatim$ ./configure && make$ STARPU_SCHED=dmda ./examples/matvecmult/matvecmult[starpu][_starpu_load_history_based_model] Warning: model matvecmult   is not calibrated, forcing calibration for this run. Use the   STARPU_CALIBRATE environment variable to control this.$ ...$ STARPU_SCHED=dmda ./examples/matvecmult/matvecmultTEST PASSED\endverbatimNote that we force to use the scheduler <c>dmda</c> to generateperformance models for the application. The application may need to berun several times before the model is calibrated.\section Simulation SimulationThen, recompile StarPU, passing \ref enable-simgrid "--enable-simgrid"to <c>./configure</c>.\verbatim$ ./configure --enable-simgrid\endverbatimTo specify the location of SimGrid, you can either set the environmentvariables SIMGRID_CFLAGS and SIMGRID_LIBS, or use the configureoptions \ref with-simgrid-dir "--with-simgrid-dir",\ref with-simgrid-include-dir "--with-simgrid-include-dir" and\ref with-simgrid-lib-dir "--with-simgrid-lib-dir", for example\verbatim$ ./configure --with-simgrid-dir=/opt/local/simgrid\endverbatimYou can then re-run the application.\verbatim$ make$ STARPU_SCHED=dmda ./examples/matvecmult/matvecmultTEST FAILED !!!\endverbatimIt is normal that the test fails: since the computation are not actually done(that is the whole point of simgrid), the result is wrong, of course.If the performance model is not calibrated enough, the following errormessage will be displayed\verbatim$ STARPU_SCHED=dmda ./examples/matvecmult/matvecmult[starpu][_starpu_load_history_based_model] Warning: model matvecmult    is not calibrated, forcing calibration for this run. Use the    STARPU_CALIBRATE environment variable to control this.[starpu][_starpu_simgrid_execute_job][assert failure] Codelet    matvecmult does not have a perfmodel, or is not calibrated enough\endverbatimThe number of devices can be chosen as usual with \ref STARPU_NCPU, \refSTARPU_NCUDA, and \ref STARPU_NOPENCL, and the amount of GPU memorywith \ref STARPU_LIMIT_CUDA_MEM, \ref STARPU_LIMIT_CUDA_devid_MEM, \refSTARPU_LIMIT_OPENCL_MEM, and \ref STARPU_LIMIT_OPENCL_devid_MEM.\section SimulationOnAnotherMachine Simulation On Another MachineThe simgrid support even permits to perform simulations on another machine, yourdesktop, typically. To achieve this, one still needs to perform the Calibrationstep on the actual machine to be simulated, then copy them to your desktopmachine (the <c>$STARPU_HOME/.starpu</c> directory). One can then perform theSimulation step on the desktop machine, by setting the environmentvariable \ref STARPU_HOSTNAME to the name of the actual machine, tomake StarPU use the performance models of the simulated machine evenon the desktop machine.If the desktop machine does not have CUDA or OpenCL, StarPU is still able touse simgrid to simulate execution with CUDA/OpenCL devices, but the applicationsource code will probably disable the CUDA and OpenCL codelets in thatcd sccase. Since during simgrid execution, the functions of the codelet are actuallynot called, one can use dummy functions such as the following to still permitCUDA or OpenCL execution:\section SimulationExamples Simulation examplesStarPU ships a few performance models for a couple of systems: attila andmirage. See section \ref SimulatedBenchmarks for the details.\section Tweaking simulationThe simulation can be tweaked, to be able to tune it between a very accuratesimulation and a very simple simulation (which is thus close to schedulingtheory results), see the \ref STARPU_SIMGRID_CUDA_MALLOC_COST and \refSTARPU_SIMGRID_CUDA_QUEUE_COST environment variables.\section MPI applicationsStarPU-MPI applications can also be run in simgrid mode. It needs to be compiledwith smpicc, and run using the starpu_smpirun script, for instance:\verbatim$ STARPU_SCHED=dmda starpu_smpirun -platform cluster.xml -hostfile hostfile ./mpi/tests/pingpong\endverbatimWhere cluster.xml is a Simgrid-MPI platform description, and hostfile thelist of MPI nodes to be used. StarPU currently only supports homogeneous MPIclusters: for each MPI node it will just replicate the architecture referred by\ref STARPU_HOSTNAME.\section Debugging applicationsBy default, simgrid uses its own implementation of threads, which prevents gdbfrom being able to inspect stacks of all threads.  To be able to fully debug anapplication running with simgrid, pass the <c>--cfg=contexts/factory:thread</c>option to the application, to make simgrid use system threads, which gdb will beable to manipulate as usual.\snippet simgrid.c To be included. You should update doxygen if you see this text.*/
 |