You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
5.3 KiB

  1. ;;; GNU Guix --- Functional package management for GNU
  2. ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
  3. ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
  4. ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
  5. ;;;
  6. ;;; This file is part of GNU Guix.
  7. ;;;
  8. ;;; GNU Guix is free software; you can redistribute it and/or modify it
  9. ;;; under the terms of the GNU General Public License as published by
  10. ;;; the Free Software Foundation; either version 3 of the License, or (at
  11. ;;; your option) any later version.
  12. ;;;
  13. ;;; GNU Guix is distributed in the hope that it will be useful, but
  14. ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
  15. ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. ;;; GNU General Public License for more details.
  17. ;;;
  18. ;;; You should have received a copy of the GNU General Public License
  19. ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
  20. (define-module (gnu packages mpi)
  21. #:use-module (guix packages)
  22. #:use-module ((guix licenses)
  23. #:hide (expat))
  24. #:use-module (guix download)
  25. #:use-module (guix utils)
  26. #:use-module (guix build-system gnu)
  27. #:use-module (gnu packages)
  28. #:use-module (gnu packages gcc)
  29. #:use-module (gnu packages linux)
  30. #:use-module (gnu packages pciutils)
  31. #:use-module (gnu packages xorg)
  32. #:use-module (gnu packages gtk)
  33. #:use-module (gnu packages xml)
  34. #:use-module (gnu packages ncurses)
  35. #:use-module (gnu packages pkg-config)
  36. #:use-module (gnu packages valgrind))
  37. (define-public hwloc
  38. (package
  39. (name "hwloc")
  40. (version "1.9")
  41. (source (origin
  42. (method url-fetch)
  43. (uri (string-append "http://www.open-mpi.org/software/hwloc/v"
  44. version "/downloads/hwloc-"
  45. version ".tar.bz2"))
  46. (sha256
  47. (base32
  48. "0zjgiili2a8v63s8ly3a8qp8ibxv1jw3zbgm7diic3w1qgqiza14"))))
  49. (build-system gnu-build-system)
  50. (arguments
  51. ;; Enable libpci support, which effectively makes hwloc GPLv2+.
  52. '(#:configure-flags '("--enable-libpci")))
  53. (inputs
  54. `(("libx11" ,libx11)
  55. ("cairo" ,cairo)
  56. ("ncurses" ,ncurses)
  57. ("expat" ,expat)))
  58. (native-inputs
  59. `(("pkg-config" ,pkg-config)))
  60. (propagated-inputs
  61. ;; 'hwloc.pc' refers to libpci and libnuma, hence the propagation.
  62. `(("numactl" ,numactl)
  63. ("pciutils" ,pciutils)))
  64. (home-page "http://www.open-mpi.org/projects/hwloc/")
  65. (synopsis "Abstraction of hardware architectures")
  66. (description
  67. "hwloc provides a portable abstraction (across OS,
  68. versions, architectures, ...) of the hierarchical topology of modern
  69. architectures, including NUMA memory nodes, sockets, shared caches, cores and
  70. simultaneous multithreading. It also gathers various attributes such as cache
  71. and memory information. It primarily aims at helping high-performance
  72. computing applications with gathering information about the hardware so as to
  73. exploit it accordingly and efficiently.
  74. hwloc may display the topology in multiple convenient formats. It also offers
  75. a powerful programming interface to gather information about the hardware,
  76. bind processes, and much more.")
  77. ;; But see above about linking against libpci.
  78. (license bsd-3)))
  79. (define-public openmpi
  80. (package
  81. (name "openmpi")
  82. (version "1.8.1")
  83. (source
  84. (origin
  85. (method url-fetch)
  86. (uri (string-append "http://www.open-mpi.org/software/ompi/v"
  87. (version-major+minor version)
  88. "/downloads/openmpi-" version ".tar.bz2"))
  89. (sha256
  90. (base32
  91. "13z1q69f3qwmmhpglarfjminfy2yw4rfqr9jydjk5507q3mjf50p"))))
  92. (build-system gnu-build-system)
  93. (inputs
  94. `(("hwloc" ,hwloc)
  95. ("gfortran" ,gfortran-4.8)
  96. ("valgrind" ,valgrind)))
  97. (native-inputs
  98. `(("pkg-config" ,pkg-config)))
  99. (arguments
  100. `(#:configure-flags `("--enable-static"
  101. "--enable-oshmem"
  102. ;; Thread support causes some applications to hang
  103. ;; "--enable-event-thread-support"
  104. ;; "--enable-opal-multi-threads"
  105. ;; "--enable-orte-progress-threads"
  106. ;; "--enable-mpi-thread-multiple"
  107. "--enable-mpi-ext=all"
  108. "--with-devel-headers"
  109. "--enable-debug"
  110. "--enable-memchecker"
  111. ,(string-append "--with-valgrind="
  112. (assoc-ref %build-inputs "valgrind"))
  113. ,(string-append "--with-hwloc="
  114. (assoc-ref %build-inputs "hwloc")))))
  115. (home-page "http://www.open-mpi.org")
  116. (synopsis "MPI-2 implementation")
  117. (description
  118. "The Open MPI Project is an MPI-2 implementation that is developed and
  119. maintained by a consortium of academic, research, and industry partners. Open
  120. MPI is therefore able to combine the expertise, technologies, and resources
  121. from all across the High Performance Computing community in order to build the
  122. best MPI library available. Open MPI offers advantages for system and
  123. software vendors, application developers and computer science researchers.")
  124. ;; See file://LICENSE
  125. (license bsd-2)))