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_UserGuide.pdf b/Doc/GraphBLAS_UserGuide.pdf index 1ed8314cf8..cdc2ac59d8 100644 Binary files a/Doc/GraphBLAS_UserGuide.pdf and b/Doc/GraphBLAS_UserGuide.pdf differ 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. 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/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 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 b6e7d19894..247b31f813 100644 --- a/cmake_modules/FindGraphBLAS.cmake +++ b/cmake_modules/FindGraphBLAS.cmake @@ -61,6 +61,8 @@ 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. +#------------------------------------------------------------------------------- + # "Include" for SuiteSparse:GraphBLAS find_path ( GRAPHBLAS_INCLUDE_DIR NAMES GraphBLAS.h @@ -72,28 +74,27 @@ 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 ) - set ( STATIC_SUFFIX .lib ) set ( STATIC_NAME graphblas_static ) else ( ) - set ( STATIC_SUFFIX .a ) 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 ( save ${CMAKE_FIND_LIBRARY_SUFFIXES} ) -set ( CMAKE_FIND_LIBRARY_SUFFIXES ${STATIC_SUFFIX} ${CMAKE_FIND_LIBRARY_SUFFIXES} ) find_library ( GRAPHBLAS_STATIC NAMES ${STATIC_NAME} HINTS ${GRAPHBLAS_ROOT} @@ -101,9 +102,13 @@ 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 ) -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 ) @@ -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 ) 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 )