From a52d76d87518a4b2f8b4bd12285754f00db93493 Mon Sep 17 00:00:00 2001 From: Tim Davis Date: Mon, 2 Jan 2023 16:31:08 -0600 Subject: [PATCH 1/5] MATLAB interface --- GraphBLAS/rename/GB_rename.h | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/GraphBLAS/rename/GB_rename.h b/GraphBLAS/rename/GB_rename.h index a31204eb40..14e32a7a1b 100644 --- a/GraphBLAS/rename/GB_rename.h +++ b/GraphBLAS/rename/GB_rename.h @@ -1473,9 +1473,13 @@ #define GxB_CREAL_FC32 GxM_CREAL_FC32 #define GxB_CREAL_FC64 GxM_CREAL_FC64 #define GxB_Desc_get GxM_Desc_get +#define GxB_Desc_get_FP64 GxM_Desc_get_FP64 +#define GxB_Desc_get_INT32 GxM_Desc_get_INT32 #define GxB_Descriptor_fprint GxM_Descriptor_fprint #define GxB_Descriptor_get GxM_Descriptor_get #define GxB_Desc_set GxM_Desc_set +#define GxB_Desc_set_FP64 GxM_Desc_set_FP64 +#define GxB_Desc_set_INT32 GxM_Desc_set_INT32 #define GxB_deserialize_type_name GxM_deserialize_type_name #define GxB_DIAG GxM_DIAG #define GxB_DIV_FC32 GxM_DIV_FC32 @@ -1600,7 +1604,17 @@ #define GxB_GE_THUNK GxM_GE_THUNK #define GxB_GE_ZERO GxM_GE_ZERO #define GxB_Global_Option_get GxM_Global_Option_get +#define GxB_Global_Option_get_CHAR GxM_Global_Option_get_CHAR +#define GxB_Global_Option_get_FP64 GxM_Global_Option_get_FP64 +#define GxB_Global_Option_get_FUNCTION GxM_Global_Option_get_FUNCTION +#define GxB_Global_Option_get_INT32 GxM_Global_Option_get_INT32 +#define GxB_Global_Option_get_INT64 GxM_Global_Option_get_INT64 #define GxB_Global_Option_set GxM_Global_Option_set +#define GxB_Global_Option_set_FP64 GxM_Global_Option_set_FP64 +#define GxB_Global_Option_set_FP64_ARRAY GxM_Global_Option_set_FP64_ARRAY +#define GxB_Global_Option_set_FUNCTION GxM_Global_Option_set_FUNCTION +#define GxB_Global_Option_set_INT32 GxM_Global_Option_set_INT32 +#define GxB_Global_Option_set_INT64_ARRAY GxM_Global_Option_set_INT64_ARRAY #define GxB_GT_THUNK GxM_GT_THUNK #define GxB_GT_ZERO GxM_GT_ZERO #define GxB_HYPER_DEFAULT GxM_HYPER_DEFAULT @@ -2029,7 +2043,11 @@ #define GxB_Matrix_isStoredElement GxM_Matrix_isStoredElement #define GxB_Matrix_memoryUsage GxM_Matrix_memoryUsage #define GxB_Matrix_Option_get GxM_Matrix_Option_get +#define GxB_Matrix_Option_get_FP64 GxM_Matrix_Option_get_FP64 +#define GxB_Matrix_Option_get_INT32 GxM_Matrix_Option_get_INT32 #define GxB_Matrix_Option_set GxM_Matrix_Option_set +#define GxB_Matrix_Option_set_FP64 GxM_Matrix_Option_set_FP64 +#define GxB_Matrix_Option_set_INT32 GxM_Matrix_Option_set_INT32 #define GxB_Matrix_pack_BitmapC GxM_Matrix_pack_BitmapC #define GxB_Matrix_pack_BitmapR GxM_Matrix_pack_BitmapR #define GxB_Matrix_pack_CSC GxM_Matrix_pack_CSC @@ -3275,7 +3293,11 @@ #define GxB_Vector_isStoredElement GxM_Vector_isStoredElement #define GxB_Vector_memoryUsage GxM_Vector_memoryUsage #define GxB_Vector_Option_get GxM_Vector_Option_get +#define GxB_Vector_Option_get_FP64 GxM_Vector_Option_get_FP64 +#define GxB_Vector_Option_get_INT32 GxM_Vector_Option_get_INT32 #define GxB_Vector_Option_set GxM_Vector_Option_set +#define GxB_Vector_Option_set_FP64 GxM_Vector_Option_set_FP64 +#define GxB_Vector_Option_set_INT32 GxM_Vector_Option_set_INT32 #define GxB_Vector_pack_Bitmap GxM_Vector_pack_Bitmap #define GxB_Vector_pack_CSC GxM_Vector_pack_CSC #define GxB_Vector_pack_Full GxM_Vector_pack_Full @@ -3619,7 +3641,6 @@ #define GB_FSE_readNCount_bmi2 GM_FSE_readNCount_bmi2 #define GB_FSE_versionNumber GM_FSE_versionNumber #define GB_FSE_writeNCount GM_FSE_writeNCount -#define GB_Global GM_Global #define GB_Global_abort_function GM_Global_abort_function #define GB_Global_abort_function_set GM_Global_abort_function_set #define GB_Global_bitmap_switch_default GM_Global_bitmap_switch_default From 6e8401c391d9641b36c25c2beb8b50403df010ac Mon Sep 17 00:00:00 2001 From: Tim Davis Date: Tue, 3 Jan 2023 10:11:48 -0600 Subject: [PATCH 2/5] FindGraphBLAS: port to windows --- cmake_modules/FindGraphBLAS.cmake | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/cmake_modules/FindGraphBLAS.cmake b/cmake_modules/FindGraphBLAS.cmake index b6e7d19894..90220381e1 100644 --- a/cmake_modules/FindGraphBLAS.cmake +++ b/cmake_modules/FindGraphBLAS.cmake @@ -61,6 +61,9 @@ in your CMakeLists.txt file. See also SuiteSparse/Example/CMakeLists.txt: # installation (SuiteSparse:GraphBLAS). As other installations become available # changes to this will likely be required. +# save the CMAKE_FIND_LIBRARY_SUFFIXES variable +set ( save ${CMAKE_FIND_LIBRARY_SUFFIXES} ) + # "Include" for SuiteSparse:GraphBLAS find_path ( GRAPHBLAS_INCLUDE_DIR NAMES GraphBLAS.h @@ -73,6 +76,8 @@ find_path ( GRAPHBLAS_INCLUDE_DIR ) # dynamic SuiteSparse:GraphBLAS library +set ( CMAKE_FIND_LIBRARY_SUFFIXES + ${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_FIND_LIBRARY_SUFFIXES} ) find_library ( GRAPHBLAS_LIBRARY NAMES graphblas HINTS ${GRAPHBLAS_ROOT} @@ -84,16 +89,14 @@ find_library ( GRAPHBLAS_LIBRARY ) if ( MSVC ) - set ( STATIC_SUFFIX .lib ) set ( STATIC_NAME graphblas_static ) else ( ) - set ( STATIC_SUFFIX .a ) set ( STATIC_NAME graphblas ) endif ( ) # static SuiteSparse:GraphBLAS library -set ( save ${CMAKE_FIND_LIBRARY_SUFFIXES} ) -set ( CMAKE_FIND_LIBRARY_SUFFIXES ${STATIC_SUFFIX} ${CMAKE_FIND_LIBRARY_SUFFIXES} ) +set ( CMAKE_FIND_LIBRARY_SUFFIXES + ${CMAKE_STATIC_LIBRARY_SUFFIX} ${CMAKE_FIND_LIBRARY_SUFFIXES} ) find_library ( GRAPHBLAS_STATIC NAMES ${STATIC_NAME} HINTS ${GRAPHBLAS_ROOT} @@ -103,6 +106,8 @@ find_library ( GRAPHBLAS_STATIC HINTS ${CMAKE_SOURCE_DIR}/../SuiteSparse/GraphBLAS PATH_SUFFIXES lib build alternative ) + +# restore the CMAKE_FIND_LIBRARY_SUFFIXES variable set ( CMAKE_FIND_LIBRARY_SUFFIXES ${save} ) # get version of the library from the dynamic library name @@ -138,7 +143,7 @@ include ( FindPackageHandleStandardArgs ) find_package_handle_standard_args( GraphBLAS - REQUIRED_VARS GRAPHBLAS_LIBRARIES GRAPHBLAS_INCLUDE_DIR + REQUIRED_VARS GRAPHBLAS_LIBRARY GRAPHBLAS_INCLUDE_DIR VERSION_VAR GRAPHBLAS_VERSION ) From bca0767c1fa89caebc38f44eedbfa4936cf7966f Mon Sep 17 00:00:00 2001 From: Tim Davis Date: Tue, 3 Jan 2023 17:35:52 -0600 Subject: [PATCH 3/5] FindGraphBLAS.cmake, for windows --- cmake_modules/FindGraphBLAS.cmake | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cmake_modules/FindGraphBLAS.cmake b/cmake_modules/FindGraphBLAS.cmake index 90220381e1..c26a26a15d 100644 --- a/cmake_modules/FindGraphBLAS.cmake +++ b/cmake_modules/FindGraphBLAS.cmake @@ -61,8 +61,7 @@ in your CMakeLists.txt file. See also SuiteSparse/Example/CMakeLists.txt: # installation (SuiteSparse:GraphBLAS). As other installations become available # changes to this will likely be required. -# save the CMAKE_FIND_LIBRARY_SUFFIXES variable -set ( save ${CMAKE_FIND_LIBRARY_SUFFIXES} ) +#------------------------------------------------------------------------------- # "Include" for SuiteSparse:GraphBLAS find_path ( GRAPHBLAS_INCLUDE_DIR @@ -76,8 +75,6 @@ find_path ( GRAPHBLAS_INCLUDE_DIR ) # dynamic SuiteSparse:GraphBLAS library -set ( CMAKE_FIND_LIBRARY_SUFFIXES - ${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_FIND_LIBRARY_SUFFIXES} ) find_library ( GRAPHBLAS_LIBRARY NAMES graphblas HINTS ${GRAPHBLAS_ROOT} @@ -92,11 +89,12 @@ if ( MSVC ) set ( STATIC_NAME graphblas_static ) else ( ) set ( STATIC_NAME graphblas ) + set ( save ${CMAKE_FIND_LIBRARY_SUFFIXES} ) + set ( CMAKE_FIND_LIBRARY_SUFFIXES + ${CMAKE_STATIC_LIBRARY_SUFFIX} ${CMAKE_FIND_LIBRARY_SUFFIXES} ) endif ( ) # static SuiteSparse:GraphBLAS library -set ( CMAKE_FIND_LIBRARY_SUFFIXES - ${CMAKE_STATIC_LIBRARY_SUFFIX} ${CMAKE_FIND_LIBRARY_SUFFIXES} ) find_library ( GRAPHBLAS_STATIC NAMES ${STATIC_NAME} HINTS ${GRAPHBLAS_ROOT} @@ -107,8 +105,10 @@ find_library ( GRAPHBLAS_STATIC PATH_SUFFIXES lib build alternative ) -# restore the CMAKE_FIND_LIBRARY_SUFFIXES variable -set ( CMAKE_FIND_LIBRARY_SUFFIXES ${save} ) +if ( NOT MSVC ) + # restore the CMAKE_FIND_LIBRARY_SUFFIXES variable + set ( CMAKE_FIND_LIBRARY_SUFFIXES ${save} ) +endif ( ) # get version of the library from the dynamic library name get_filename_component ( GRAPHBLAS_LIBRARY ${GRAPHBLAS_LIBRARY} REALPATH ) From 8593844b49dc1503470b372cd268228ccbe0f63c Mon Sep 17 00:00:00 2001 From: Tim Davis Date: Thu, 5 Jan 2023 12:40:47 -0600 Subject: [PATCH 4/5] date, MSVC 2019+ workaround, MSVC locations --- Doc/ChangeLog | 2 +- Doc/GraphBLAS_version.tex | 2 +- Include/GraphBLAS.h | 2 +- README.md | 2 +- Source/GB_compiler.h | 16 ++++++++-------- Source/Generated2/GB_binop__first_fc32.c | 2 +- Source/Generated2/GB_binop__second_fc32.c | 2 +- Source/codegen_binop_method.m | 2 +- cmake_modules/FindGraphBLAS.cmake | 8 ++++---- cmake_modules/GraphBLAS_version.cmake | 2 +- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Doc/ChangeLog b/Doc/ChangeLog index 2bf5e9d155..418a194803 100644 --- a/Doc/ChangeLog +++ b/Doc/ChangeLog @@ -1,4 +1,4 @@ -Version 7.4.1, Jan 1, 2023 +Version 7.4.1, Jan 9, 2023 * global free pool: disabled. Benefit for single-thread user applications was modest, and it causes too much contention in a critical section diff --git a/Doc/GraphBLAS_version.tex b/Doc/GraphBLAS_version.tex index bf870d4381..bf84aa4d02 100644 --- a/Doc/GraphBLAS_version.tex +++ b/Doc/GraphBLAS_version.tex @@ -1,5 +1,5 @@ % version of SuiteSparse:GraphBLAS \date{VERSION 7.4.1, -Jan 1, 2023} +Jan 9, 2023} diff --git a/Include/GraphBLAS.h b/Include/GraphBLAS.h index 18cec55dbb..8981435e21 100644 --- a/Include/GraphBLAS.h +++ b/Include/GraphBLAS.h @@ -230,7 +230,7 @@ // The version of this implementation, and the GraphBLAS API version: #define GxB_IMPLEMENTATION_NAME "SuiteSparse:GraphBLAS" -#define GxB_IMPLEMENTATION_DATE "Jan 1, 2023" +#define GxB_IMPLEMENTATION_DATE "Jan 9, 2023" #define GxB_IMPLEMENTATION_MAJOR 7 #define GxB_IMPLEMENTATION_MINOR 4 #define GxB_IMPLEMENTATION_SUB 1 diff --git a/README.md b/README.md index 1f6e8a1b66..a1f83f2bea 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2022, All Rights Reserved. SPDX-License-Identifier: Apache-2.0 -VERSION 7.4.1, Jan 1, 2023 +VERSION 7.4.1, Jan 9, 2023 SuiteSparse:GraphBLAS is a complete implementation of the GraphBLAS standard, which defines a set of sparse matrix operations on an extended algebra of diff --git a/Source/GB_compiler.h b/Source/GB_compiler.h index 6d8ee8d5d8..bd6bbe8629 100644 --- a/Source/GB_compiler.h +++ b/Source/GB_compiler.h @@ -125,14 +125,14 @@ // Workaround for compiler bug in Microsoft Visual Studio 2019 //------------------------------------------------------------------------------ -// The GB_COMPILER_MSC_2019 flag disables the FIRST_FC32 and SECOND_FC32 binary -// operators for the MS Visual Studio 2019 compiler (MSC versions 19.20 to -// 19.29). It's possible that the compiler bug appears in 19.30 and later (VS -// 2022), but this hasn't been tested. This macro optimistically assumes the -// bug will be fixed in that version. - -#define GB_COMPILER_MSC_2019 ( GB_COMPILER_MSC && (GB_COMPILER_MAJOR == 19) \ - && (GB_COMPILER_MINOR >= 20) && (GB_COMPILER_MINOR <= 29) ) +// The GB_COMPILER_MSC_2019_OR_NEWER flag disables the FIRST_FC32 and +// SECOND_FC32 binary operators for the MS Visual Studio 2019 or newer compilers +// (MSC versions 19.20 or newer). It's possible that the compiler bug will be +// fixed in later versions of the MSC. In that case, an upper version bound +// should be added to this macro. + +#define GB_COMPILER_MSC_2019_OR_NEWER ( GB_COMPILER_MSC \ + && (GB_COMPILER_MAJOR == 19) && (GB_COMPILER_MINOR >= 20)) //------------------------------------------------------------------------------ // malloc.h: required include file for Microsoft Visual Studio diff --git a/Source/Generated2/GB_binop__first_fc32.c b/Source/Generated2/GB_binop__first_fc32.c index 1b2c611f6e..de4edb9247 100644 --- a/Source/Generated2/GB_binop__first_fc32.c +++ b/Source/Generated2/GB_binop__first_fc32.c @@ -118,7 +118,7 @@ // disable this operator and use the generic case if these conditions hold #define GB_DISABLE \ - (GxB_NO_FIRST || GxB_NO_FC32 || GxB_NO_FIRST_FC32 || GB_COMPILER_MSC_2019) + (GxB_NO_FIRST || GxB_NO_FC32 || GxB_NO_FIRST_FC32 || GB_COMPILER_MSC_2019_OR_NEWER) //------------------------------------------------------------------------------ // C += A+B, all 3 matrices dense diff --git a/Source/Generated2/GB_binop__second_fc32.c b/Source/Generated2/GB_binop__second_fc32.c index 81757dabf6..e607d20029 100644 --- a/Source/Generated2/GB_binop__second_fc32.c +++ b/Source/Generated2/GB_binop__second_fc32.c @@ -118,7 +118,7 @@ // disable this operator and use the generic case if these conditions hold #define GB_DISABLE \ - (GxB_NO_SECOND || GxB_NO_FC32 || GxB_NO_SECOND_FC32 || GB_COMPILER_MSC_2019) + (GxB_NO_SECOND || GxB_NO_FC32 || GxB_NO_SECOND_FC32 || GB_COMPILER_MSC_2019_OR_NEWER) //------------------------------------------------------------------------------ // C += A+B, all 3 matrices dense diff --git a/Source/codegen_binop_method.m b/Source/codegen_binop_method.m index 38a2a3134c..f20e4eabef 100644 --- a/Source/codegen_binop_method.m +++ b/Source/codegen_binop_method.m @@ -228,7 +228,7 @@ function codegen_binop_method (binop, op, xtype) (isequal (binop, 'first') || isequal (binop, 'second'))) % disable the FIRST_FC32 and SECOND_FC32 binary operators for % MS Visual Studio 2019. These files trigger a bug in the compiler. - disable = [disable ' || GB_COMPILER_MSC_2019'] ; + disable = [disable ' || GB_COMPILER_MSC_2019_OR_NEWER'] ; end fprintf (f, 'define(`GB_disable'', `(%s)'')\n', disable) ; diff --git a/cmake_modules/FindGraphBLAS.cmake b/cmake_modules/FindGraphBLAS.cmake index c26a26a15d..247b31f813 100644 --- a/cmake_modules/FindGraphBLAS.cmake +++ b/cmake_modules/FindGraphBLAS.cmake @@ -74,15 +74,15 @@ find_path ( GRAPHBLAS_INCLUDE_DIR PATH_SUFFIXES include Include ) -# dynamic SuiteSparse:GraphBLAS library +# dynamic SuiteSparse:GraphBLAS library (or static if no dynamic library was built) find_library ( GRAPHBLAS_LIBRARY - NAMES graphblas + NAMES graphblas graphblas_static HINTS ${GRAPHBLAS_ROOT} HINTS ENV GRAPHBLAS_ROOT HINTS ${CMAKE_SOURCE_DIR}/.. HINTS ${CMAKE_SOURCE_DIR}/../GraphBLAS HINTS ${CMAKE_SOURCE_DIR}/../SuiteSparse/GraphBLAS - PATH_SUFFIXES lib build alternative + PATH_SUFFIXES lib build build/Release build/Debug alternative ) if ( MSVC ) @@ -102,7 +102,7 @@ find_library ( GRAPHBLAS_STATIC HINTS ${CMAKE_SOURCE_DIR}/.. HINTS ${CMAKE_SOURCE_DIR}/../GraphBLAS HINTS ${CMAKE_SOURCE_DIR}/../SuiteSparse/GraphBLAS - PATH_SUFFIXES lib build alternative + PATH_SUFFIXES lib build build/Release build/Debug alternative ) if ( NOT MSVC ) diff --git a/cmake_modules/GraphBLAS_version.cmake b/cmake_modules/GraphBLAS_version.cmake index 95e6b3f83c..5d215c8dfb 100644 --- a/cmake_modules/GraphBLAS_version.cmake +++ b/cmake_modules/GraphBLAS_version.cmake @@ -6,7 +6,7 @@ # SPDX-License-Identifier: Apache-2.0 # version of SuiteSparse:GraphBLAS -set ( GraphBLAS_DATE "Jan 1, 2023" ) +set ( GraphBLAS_DATE "Jan 9, 2023" ) set ( GraphBLAS_VERSION_MAJOR 7 ) set ( GraphBLAS_VERSION_MINOR 4 ) set ( GraphBLAS_VERSION_SUB 1 ) From 10d44a11c5e762a5a2bc0a1c2129f27c73382468 Mon Sep 17 00:00:00 2001 From: Tim Davis Date: Sat, 7 Jan 2023 17:28:32 -0600 Subject: [PATCH 5/5] user guide --- Doc/GraphBLAS_UserGuide.pdf | Bin 1092003 -> 1091996 bytes Doc/GraphBLAS_UserGuide.tex | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Doc/GraphBLAS_UserGuide.pdf b/Doc/GraphBLAS_UserGuide.pdf index 1ed8314cf8e4f7957cca6cda1498e28c4807be1a..cdc2ac59d814125095c80c7154225b413ea3ce26 100644 GIT binary patch delta 21073 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

Js~ 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 NN>2(3HMKF5`VWP;7-Rqd diff --git a/Doc/GraphBLAS_UserGuide.tex b/Doc/GraphBLAS_UserGuide.tex index c9a67c7b08..5adad2e2da 100644 --- a/Doc/GraphBLAS_UserGuide.tex +++ b/Doc/GraphBLAS_UserGuide.tex @@ -2017,7 +2017,7 @@ \subsection{GraphBLAS unary operators: {\sf GrB\_UnaryOp}, $z=f(x)$} %========== $\sinh^{-1}(x)$ when $x$ is complex do not compute the correct result. Thus, the unary operators \verb'GxB_ASIN_FC32', \verb'GxB_ASIN_FC64' \verb'GxB_ASINH_FC32', and \verb'GxB_ASINH_FC64' do not work properly if the MS -Visual Studio compiler is used. These functions work properly if the gcc, icc, +Visual Studio compiler is used. These functions work properly if the gcc, icx, icc, or clang compilers are used on Linux or MacOS. Integer division by zero normally terminates an application, but this is @@ -14873,7 +14873,7 @@ \subsection{On Linux and Mac} {\small \begin{verbatim} - make CC=icx CXX=icpx JOBS=4 \end{verbatim} } + make CC=icx JOBS=4 \end{verbatim} } GraphBLAS v6.1.3 and later use the \verb'cpu_features' package by Google to determine if the target architecture supports AVX2 and/or AVX512F (on Intel @@ -14946,7 +14946,7 @@ \subsection{More details on the Mac (Intel-based)} {\small \begin{verbatim} - make CC=icc CXX=icpc \end{verbatim} } + make CC=icx \end{verbatim} } The following instructions work on MacOS Big Sur (v11.3) and MacOS Monterey (12.1), using @@ -15062,7 +15062,7 @@ \subsection{More details for MATLAB on the Mac (Apple Silicon based)} sudo make install \end{verbatim} -Ignore the \verb'"-arch option ignored' warnings. +Ignore the \verb'"-arch option ignored"' warnings. You can now start MATLAB and install the MATLAB interface with \verb'gbmake' as described in the previous section. @@ -15112,12 +15112,12 @@ \subsection{On Microsoft Windows} If you use a recent \verb'gcc' or \verb'icx' compiler on Windows other than the Microsoft Compiler (\verb'cl'), these limitations can be avoided. -The following instructions apply to Windows 10, CMake 3.16, and +The following instructions apply to Windows 10, CMake 3.19, and Visual Studio 2019, but may work for earlier versions. \begin{enumerate} -\item Install CMake 3.16 or later, if not already installed. +\item Install CMake 3.19 or later, if not already installed. See \url{https://cmake.org/} for details. \item Install Microsoft Visual Studio, if not already installed.