430_mic_support.doxy 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /* StarPU --- Runtime system for heterogeneous multicore architectures.
  2. *
  3. * Copyright (C) 2010-2017, 2019 CNRS
  4. * Copyright (C) 2011,2012,2016 Inria
  5. * Copyright (C) 2009-2011,2013-2016 Université de Bordeaux
  6. *
  7. * StarPU is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU Lesser General Public License as published by
  9. * the Free Software Foundation; either version 2.1 of the License, or (at
  10. * your option) any later version.
  11. *
  12. * StarPU is distributed in the hope that it will be useful, but
  13. * WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. *
  16. * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  17. */
  18. /*! \page MICSupport MIC Xeon Phi Support
  19. \section Compilation Compilation
  20. MIC Xeon Phi support actually needs two compilations of StarPU, one for the host and one for
  21. the device. The <c>PATH</c> environment variable has to include the path to the
  22. cross-compilation toolchain, for instance <c>/usr/linux-k1om-4.7/bin</c> .
  23. The <c>SINK_PKG_CONFIG_PATH</c> environment variable should include the path to the
  24. cross-compiled <c>hwloc.pc</c>.
  25. The script <c>mic-configure</c> can then be used to achieve the two compilations: it basically
  26. calls <c>configure</c> as appropriate from two new directories: <c>build_mic</c> and
  27. <c>build_host</c>. <c>make</c> and <c>make install</c> can then be used as usual and will
  28. recurse into both directories. If different \c configure options are needed
  29. for the host and for the mic, one can use <c>--with-host-param=--with-fxt</c>
  30. for instance to specify the <c>--with-fxt</c> option for the host only, or
  31. <c>--with-mic-param=--with-fxt</c> for the mic only.
  32. One can also run StarPU just natively on the Xeon Phi, i.e. it will only run
  33. directly on the Phi without any exchange with the host CPU. The binaries in
  34. <c>build_mic</c> can be run that way.
  35. For MPI support, you will probably have to specify different MPI compiler path
  36. or option for the host and the device builds, for instance:
  37. \verbatim
  38. ./mic-configure --with-mic-param=--with-mpicc="/.../mpiicc -mmic" \
  39. --with-host-param=--with-mpicc=/.../mpiicc
  40. \endverbatim
  41. In case you have troubles with the \c coi or \c scif libraries (the Intel paths are
  42. really not standard, it seems...), you can still make a build in native mode
  43. only, by using <c>mic-configure --enable-native-mic</c> (and notably without
  44. <c>--enable-mic</c> since in that case we don't need \c mic offloading support).
  45. \section PortingApplicationsToMIC Porting Applications To MIC Xeon Phi
  46. The simplest way to port an application to MIC Xeon Phi is to set the field
  47. starpu_codelet::cpu_funcs_name, to provide StarPU with the function
  48. name of the CPU implementation, so for instance:
  49. \verbatim
  50. struct starpu_codelet cl =
  51. {
  52. .cpu_funcs = {myfunc},
  53. .cpu_funcs_name = {"myfunc"},
  54. .nbuffers = 1,
  55. }
  56. \endverbatim
  57. StarPU will thus simply use the
  58. existing CPU implementation (cross-rebuilt in the MIC Xeon Phi case). The
  59. functions have to be globally-visible (i.e. not <c>static</c>) for
  60. StarPU to be able to look them up, and \c -rdynamic must be passed to \c gcc (or
  61. \c -export-dynamic to \c ld) so that symbols of the main program are visible.
  62. If you have used the starpu_codelet::where field, you additionally need to add in it
  63. ::STARPU_MIC for the Xeon Phi.
  64. For non-native MIC Xeon Phi execution, the 'main' function of the application, on the sink, should call starpu_init() immediately upon start-up; the starpu_init() function never returns. On the host, the 'main' function may freely perform application related initialization calls as usual, before calling starpu_init().
  65. For MIC Xeon Phi, the application may programmatically detect whether executing on the sink or on the host, by checking whether the \ref STARPU_SINK environment variable is defined (on the sink) or not (on the host).
  66. \section LaunchingPrograms Launching Programs
  67. MIC programs are started from the host. StarPU automatically
  68. starts the same program on MIC devices. It however needs to get
  69. the MIC-cross-built binary. It will look for the file given by the
  70. environment variable \ref STARPU_MIC_SINK_PROGRAM_NAME or in the
  71. directory given by the environment variable \ref STARPU_MIC_SINK_PROGRAM_PATH,
  72. or in the field
  73. starpu_conf::mic_sink_program_path. It will also look in the current
  74. directory for the same binary name plus the suffix <c>-mic</c> or
  75. <c>_mic</c>.
  76. The testsuite can be started by simply running <c>make check</c> from the
  77. top directory. It will recurse into both <c>build_host</c> to run tests with only
  78. the host, and into <c>build_mic</c> to run tests with both the host and the MIC
  79. devices. Single tests with the host and the MIC can be run by starting
  80. <c>./loader-cross.sh ./the_test</c> from <c>build_mic/tests</c>.
  81. */