git: 3b8065a2adbf - main - math/fastops: new port had been added (+)

From: Alexey Dokuchaev <danfe_at_FreeBSD.org>
Date: Fri, 29 Oct 2021 10:52:49 UTC
The branch main has been updated by danfe:

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

commit 3b8065a2adbf0f8acae9c980961cb5491034a1ad
Author:     Alexey Dokuchaev <danfe@FreeBSD.org>
AuthorDate: 2021-10-29 10:49:48 +0000
Commit:     Alexey Dokuchaev <danfe@FreeBSD.org>
CommitDate: 2021-10-29 10:49:55 +0000

    math/fastops: new port had been added (+)
    
    This small library enables acceleration of bulk calls of certain math
    functions on AVX and AVX2 hardware.  Currently supported operations are
    exp, log, sigmoid, and tanh.  The library is designed with extensibility
    in mind.
    
    Restrict the port to amd64 as it's inherently useless anywhere else and
    does not even build at least on i386.
    
    WWW: https://github.com/yandex/fastops
---
 math/Makefile                                      |  1 +
 math/fastops/Makefile                              | 20 ++++++++++++++
 math/fastops/distinfo                              |  3 +++
 math/fastops/files/patch-CMakeLists.txt            | 13 +++++++++
 .../files/patch-fastops_core_SIMDFunctions.h       | 10 +++++++
 math/fastops/files/patch-fastops_core_avx__id.cpp  | 31 ++++++++++++++++++++++
 math/fastops/pkg-descr                             |  6 +++++
 math/fastops/pkg-plist                             | 11 ++++++++
 8 files changed, 95 insertions(+)

diff --git a/math/Makefile b/math/Makefile
index d5e545695f82..1fe9497f83f0 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -280,6 +280,7 @@
     SUBDIR += facile
     SUBDIR += faiss
     SUBDIR += fann
+    SUBDIR += fastops
     SUBDIR += fcl
     SUBDIR += fcl05
     SUBDIR += fflas-ffpack
diff --git a/math/fastops/Makefile b/math/fastops/Makefile
new file mode 100644
index 000000000000..3d039e2b74af
--- /dev/null
+++ b/math/fastops/Makefile
@@ -0,0 +1,20 @@
+# Created by: Alexey Dokuchaev <danfe@FreeBSD.org>
+
+PORTNAME=	fastops
+PORTVERSION=	1.0.0
+DISTVERSIONPREFIX=	v
+CATEGORIES=	math
+
+MAINTAINER=	danfe@FreeBSD.org
+COMMENT=	AVX/AVX2-accelerated bulk call of math functions
+
+LICENSE=	MIT
+
+ONLY_FOR_ARCHS=	amd64
+ONLY_FOR_ARCHS_REASON=	uses AVX and AVX2 instructions
+
+USES=		cmake compiler:c++17-lang
+USE_GITHUB=	yes
+GH_ACCOUNT=	yandex
+
+.include <bsd.port.mk>
diff --git a/math/fastops/distinfo b/math/fastops/distinfo
new file mode 100644
index 000000000000..74e54d2875f7
--- /dev/null
+++ b/math/fastops/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1588749823
+SHA256 (yandex-fastops-v1.0.0_GH0.tar.gz) = 16cd75b85717c60ff9552e140ba59dfc0d49217633a9c8c8614e9d001ce1303b
+SIZE (yandex-fastops-v1.0.0_GH0.tar.gz) = 266428
diff --git a/math/fastops/files/patch-CMakeLists.txt b/math/fastops/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..3198b10cb280
--- /dev/null
+++ b/math/fastops/files/patch-CMakeLists.txt
@@ -0,0 +1,13 @@
+--- CMakeLists.txt.orig	2020-05-06 07:23:43 UTC
++++ CMakeLists.txt
+@@ -3,9 +3,8 @@ cmake_minimum_required(VERSION 2.6)
+ project(fastops)
+ 
+ include_directories("${PROJECT_SOURCE_DIR}")
+-set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/install)
+ 
+-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3")
++set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
+ 
+ # Specify the C++ 17 language standard for
+ # any version of Microsoft Visual C++ Compiler
diff --git a/math/fastops/files/patch-fastops_core_SIMDFunctions.h b/math/fastops/files/patch-fastops_core_SIMDFunctions.h
new file mode 100644
index 000000000000..82a90e4559b8
--- /dev/null
+++ b/math/fastops/files/patch-fastops_core_SIMDFunctions.h
@@ -0,0 +1,10 @@
+--- fastops/core/SIMDFunctions.h.orig	2020-05-06 07:23:43 UTC
++++ fastops/core/SIMDFunctions.h
+@@ -9,6 +9,7 @@
+ #include <emmintrin.h>
+ #include <xmmintrin.h>
+ #include <immintrin.h>
++#include <stdint.h>
+ 
+ #if defined(__clang_major__) && !defined(__apple_build_version__) && __clang_major__ >= 8
+ #   define Y_HAVE_NEW_INTRINSICS
diff --git a/math/fastops/files/patch-fastops_core_avx__id.cpp b/math/fastops/files/patch-fastops_core_avx__id.cpp
new file mode 100644
index 000000000000..0ea3e89ab7ab
--- /dev/null
+++ b/math/fastops/files/patch-fastops_core_avx__id.cpp
@@ -0,0 +1,31 @@
+--- fastops/core/avx_id.cpp.orig	2020-05-06 07:23:43 UTC
++++ fastops/core/avx_id.cpp
+@@ -36,23 +36,23 @@ namespace NFastOps {
+         // This in EBX of cpuid(7)
+         static constexpr uint32_t AVX2_BIT    = 0x00000020;
+ 
+-        static void CpuId(int32_t op, int32_t* res) noexcept {
++        static void CpuId(int32_t op, int32_t sub, int32_t* res) noexcept {
+ #if defined(_MSC_VER) && !defined(__clang__)
+-            __cpuid((int*)res, op);
++            __cpuidex((int*)res, op, sub);
+ #else
+-            __cpuid(op, res[EAX], res[EBX], res[ECX], res[EDX]);
++            __cpuid_count(op, sub, res[EAX], res[EBX], res[ECX], res[EDX]);
+ #endif
+         }
+ 
+         bool IsAVXEnabled() noexcept {
+             int32_t info[NREGS];
+-            CpuId(1, info);
++            CpuId(1, 0, info);
+             return (info[ECX] & OSXSAVE_BIT) && IsYMMSaveEnabled() && (info[ECX] & AVX_BIT);
+         }
+ 
+         bool IsAVX2Enabled() noexcept {
+             int32_t info[NREGS];
+-            CpuId(7, info);
++            CpuId(7, 0, info);
+             return info[EBX] & AVX2_BIT;
+         }
+     }
diff --git a/math/fastops/pkg-descr b/math/fastops/pkg-descr
new file mode 100644
index 000000000000..b3b4a059be88
--- /dev/null
+++ b/math/fastops/pkg-descr
@@ -0,0 +1,6 @@
+This small library enables acceleration of bulk calls of certain math
+functions on AVX and AVX2 hardware.  Currently supported operations are
+exp, log, sigmoid, and tanh.  The library is designed with extensibility
+in mind.
+
+WWW: https://github.com/yandex/fastops
diff --git a/math/fastops/pkg-plist b/math/fastops/pkg-plist
new file mode 100644
index 000000000000..736d23848c3a
--- /dev/null
+++ b/math/fastops/pkg-plist
@@ -0,0 +1,11 @@
+bin/benchmark
+bin/eval
+bin/fastops_test
+include/avx/ops_avx.h
+include/avx2/ops_avx2.h
+include/core/FastIntrinsics.h
+include/core/SIMDFunctions.h
+include/core/avx_id.h
+include/fastops.h
+include/plain/ops_plain.h
+lib/libfastops.a