git: cb7c5aa4d712 - main - math/cosma: New port: Distributed communication-optimal matrix multiplication algorithm

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Tue, 12 Jul 2022 04:10:10 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=cb7c5aa4d71204749cf8287cb61ad694d0db7404

commit cb7c5aa4d71204749cf8287cb61ad694d0db7404
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2022-07-12 03:43:15 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2022-07-12 04:10:07 +0000

    math/cosma: New port: Distributed communication-optimal matrix multiplication algorithm
---
 math/Makefile        |  1 +
 math/cosma/Makefile  | 38 +++++++++++++++++++++++++++
 math/cosma/distinfo  |  7 +++++
 math/cosma/pkg-descr | 17 ++++++++++++
 math/cosma/pkg-plist | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 136 insertions(+)

diff --git a/math/Makefile b/math/Makefile
index 2b4e15180d3a..62c454686a0b 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -246,6 +246,7 @@
     SUBDIR += concorde
     SUBDIR += convertall
     SUBDIR += coq
+    SUBDIR += cosma
     SUBDIR += couenne
     SUBDIR += coxeter3
     SUBDIR += cppad
diff --git a/math/cosma/Makefile b/math/cosma/Makefile
new file mode 100644
index 000000000000..69a25b026351
--- /dev/null
+++ b/math/cosma/Makefile
@@ -0,0 +1,38 @@
+PORTNAME=	cosma
+DISTVERSIONPREFIX=	v
+DISTVERSION=	2.5.1-23
+DISTVERSIONSUFFIX=	-ga3101bb
+CATEGORIES=	math
+
+MAINTAINER=	yuri@FreeBSD.org
+COMMENT=	Distributed communication-optimal matrix multiplication algorithm
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	openmpi>0:net/openmpi
+LIB_DEPENDS=	libopenblas.so:math/openblas
+RUN_DEPENDS=	openmpi>0:net/openmpi
+
+USES=		cmake:testing
+USE_LDCONFIG=	yes
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	eth-cscs
+GH_PROJECT=	COSMA
+GH_TUPLE=	eth-cscs:COSTA:e48f571:costa/libs/COSTA \
+		eth-cscs:Tiled-MM:9e880f9:tiledmm/libs/Tiled-MM
+
+CMAKE_ON=	BUILD_SHARED_LIBS
+CMAKE_OFF=	COSMA_WITH_TESTS
+CMAKE_ARGS=	-DCOSMA_BLAS="OPENBLAS"
+CMAKE_TESTING_ON=	COSMA_WITH_TESTS
+
+post-install:
+	@cd ${STAGEDIR}${PREFIX} && \
+		${RMDIR} \
+			include/costa/pxtran \
+			include/costa/pxtranc \
+			include/costa/pxtranu
+
+.include <bsd.port.mk>
diff --git a/math/cosma/distinfo b/math/cosma/distinfo
new file mode 100644
index 000000000000..99b8a54db686
--- /dev/null
+++ b/math/cosma/distinfo
@@ -0,0 +1,7 @@
+TIMESTAMP = 1657596037
+SHA256 (eth-cscs-COSMA-v2.5.1-23-ga3101bb_GH0.tar.gz) = b1f51a3c3c97bef204bbaec633812f6150d4ccc31cfcb3556cbcbbfcc48ad7fe
+SIZE (eth-cscs-COSMA-v2.5.1-23-ga3101bb_GH0.tar.gz) = 1654008
+SHA256 (eth-cscs-COSTA-e48f571_GH0.tar.gz) = 254faeaad2a4d1d7e378bf64523afb59cc9bc6f6d6b9a61f97c2818d64e9c4de
+SIZE (eth-cscs-COSTA-e48f571_GH0.tar.gz) = 804692
+SHA256 (eth-cscs-Tiled-MM-9e880f9_GH0.tar.gz) = bde0484ec241a393bb0fd82cb1d4ab0421ecbbfa85b50e442bf1c364803070a3
+SIZE (eth-cscs-Tiled-MM-9e880f9_GH0.tar.gz) = 139512
diff --git a/math/cosma/pkg-descr b/math/cosma/pkg-descr
new file mode 100644
index 000000000000..d0b682e35293
--- /dev/null
+++ b/math/cosma/pkg-descr
@@ -0,0 +1,17 @@
+COSMA is a parallel, high-performance, GPU-accelerated, matrix-matrix
+multiplication algorithm that is communication-optimal for all
+combinations of matrix dimensions, number of processors and memory
+sizes, without the need for any parameter tuning. The key idea behind
+COSMA is to first derive a tight optimal sequential schedule and only
+then parallelize it, preserving I/O optimality between processes. This
+stands in contrast with the 2D and 3D algorithms, which fix process
+domain decomposition upfront and then map it to the matrix dimensions,
+which may result in asymptotically more communication. The final
+design of COSMA facilitates the overlap of computation and
+communication, ensuring speedups and applicability of modern
+mechanisms such as RDMA. COSMA allows to not utilize some processors
+in order to optimize the processor grid, which reduces the
+communication volume even further and increases the computation volume
+per processor.
+
+WWW: https://github.com/eth-cscs/COSMA
diff --git a/math/cosma/pkg-plist b/math/cosma/pkg-plist
new file mode 100644
index 000000000000..c15206378e0f
--- /dev/null
+++ b/math/cosma/pkg-plist
@@ -0,0 +1,73 @@
+include/cosma/aligned_allocator.hpp
+include/cosma/blacs.hpp
+include/cosma/blas.hpp
+include/cosma/buffer.hpp
+include/cosma/cinterface.hpp
+include/cosma/communicator.hpp
+include/cosma/context.hpp
+include/cosma/cosma_pxgemm.hpp
+include/cosma/environment_variables.hpp
+include/cosma/gpu/gpu_aware_mpi_utils.hpp
+include/cosma/gpu/gpu_runtime_api.hpp
+include/cosma/gpu/nccl_mapper.hpp
+include/cosma/gpu/nccl_utils.hpp
+include/cosma/gpu/utils.hpp
+include/cosma/interval.hpp
+include/cosma/layout.hpp
+include/cosma/local_multiply.hpp
+include/cosma/mapper.hpp
+include/cosma/math_utils.hpp
+include/cosma/matrix.hpp
+include/cosma/memory_pool.hpp
+include/cosma/mpi_mapper.hpp
+include/cosma/multiply.hpp
+include/cosma/one_sided_communicator.hpp
+include/cosma/pinned_buffers.hpp
+include/cosma/profiler.hpp
+include/cosma/pxgemm_params.hpp
+include/cosma/random_generator.hpp
+include/cosma/scalapack.hpp
+include/cosma/statistics.hpp
+include/cosma/strategy.hpp
+include/cosma/timer.hpp
+include/cosma/two_sided_communicator.hpp
+include/costa/blacs.hpp
+include/costa/cinterface/transform.hpp
+include/costa/grid2grid/block.hpp
+include/costa/grid2grid/cantor_mapping.hpp
+include/costa/grid2grid/comm_volume.hpp
+include/costa/grid2grid/communication_data.hpp
+include/costa/grid2grid/grid2D.hpp
+include/costa/grid2grid/grid_cover.hpp
+include/costa/grid2grid/grid_layout.hpp
+include/costa/grid2grid/interval.hpp
+include/costa/grid2grid/memory_utils.hpp
+include/costa/grid2grid/mpi_type_wrapper.hpp
+include/costa/grid2grid/profiler.hpp
+include/costa/grid2grid/ranks_reordering.hpp
+include/costa/grid2grid/scalapack_layout.hpp
+include/costa/grid2grid/threads_workspace.hpp
+include/costa/grid2grid/transform.hpp
+include/costa/grid2grid/transformer.hpp
+include/costa/grid2grid/utils.hpp
+include/costa/layout.hpp
+include/costa/pxgemr2d/costa_pxgemr2d.hpp
+include/costa/pxgemr2d/pxgemr2d_params.hpp
+include/costa/pxtran_op/costa_pxtran_op.hpp
+include/costa/pxtran_op/pxtran_op_params.hpp
+include/costa/random_generator.hpp
+include/costa/scalapack.hpp
+lib/cmake/cosma/FindMKL.cmake
+lib/cmake/cosma/cosmaConfig.cmake
+lib/cmake/cosma/cosmaConfigVersion.cmake
+lib/cmake/cosma/cosmaTargets-%%CMAKE_BUILD_TYPE%%.cmake
+lib/cmake/cosma/cosmaTargets.cmake
+lib/cmake/costa/FindMKL.cmake
+lib/cmake/costa/costaConfig.cmake
+lib/cmake/costa/costaConfigVersion.cmake
+lib/cmake/costa/costaTargets-%%CMAKE_BUILD_TYPE%%.cmake
+lib/cmake/costa/costaTargets.cmake
+lib/libcosma.so
+lib/libcosta.so
+libdata/pkgconfig/cosma.pc
+libdata/pkgconfig/costa.pc