Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
f88545d
Started working on cuDSS Sparse Solver Interface. Started adding solv…
tonino102008 Oct 19, 2025
89d485c
Finished writing user modifiable solver options for cuDSS solver.
tonino102008 Oct 19, 2025
500a1b3
Started working on Initialize Structure and creating all the required…
tonino102008 Oct 21, 2025
c5961dd
Finished InitializeImpl and InitializeStructure. Later will have to r…
tonino102008 Oct 22, 2025
845a351
Updated configuration files to compile Ipopt with cuDSS. First try.
tonino102008 Oct 24, 2025
f64bb42
Created cuDSS wrapper library to interface cuDSS with Ipopt. Changed …
tonino102008 Oct 25, 2025
fa6134c
Small fix to configure script to have everything working.
tonino102008 Oct 25, 2025
c2b5732
Updated cuDSS interface with necessary functions for Ipopt. Updated I…
tonino102008 Oct 26, 2025
ce1ebce
Fixed bug in cudss matrix update phase. Updated test problem and make…
tonino102008 Oct 28, 2025
ce93ff4
Delete .vscode directory
tonino102008 Oct 28, 2025
b78fd34
Small fix to cuDSS interface.
tonino102008 Oct 28, 2025
04abee9
Updated interfaces. Still to solve 2nd call to ipopt solver (re-solve…
tonino102008 Oct 29, 2025
fd4db3e
Added error checking on cuDSS solver options as explained in https://…
tonino102008 Oct 31, 2025
27102ad
Restored test as they were before (no linear_solver option with cuDSS…
tonino102008 Nov 4, 2025
194b677
Added support for IPOPT_SINGLE. Switched all integer types to int64_t…
tonino102008 Nov 4, 2025
8c5fabf
Resolved CUDA allocation error when attempting multiple IpoptSolve ca…
tonino102008 Nov 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 148 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -704,6 +704,8 @@ COIN_HAS_MUMPS_TRUE
IPOPTLIB_CFLAGS
COIN_HAS_ASL_FALSE
COIN_HAS_ASL_TRUE
HAVE_CUDSS_FALSE
HAVE_CUDSS_TRUE
SIPOPTAMPLINTERFACELIB_PCFILES
SIPOPTAMPLINTERFACELIB_CFLAGS
SIPOPTAMPLINTERFACELIB_LFLAGS
Expand Down Expand Up @@ -922,6 +924,9 @@ with_spral
with_spral_lflags
with_spral_cflags
with_wsmp
with_cudss
with_cudss_lflags
with_cudss_cflags
enable_inexact_solver
enable_java
enable_linear_solver_loader
Expand Down Expand Up @@ -1675,6 +1680,18 @@ Optional Packages:
--with-spral-cflags Compiler flags for Spral appropriate for your
environment. (Most often, -I specs for header file
directories.)
--without-cudss Do not use cuDSS. If an argument is given to
--with-cuDSS, then 'yes' is equivalent
to --with-cuDSS, 'no' is equivalent to
--without-cuDSS and any other argument is applied as
for --with-cuDSS-lflags. Requires --with-intsize=64
--with-cudss-lflags Linker flags for cuDSS appropriate for your
environment. (Most often, -l specs for libraries.)
Requires --with-intsize=64
--with-cudss-cflags Compiler flags for cuDSS appropriate for your
environment. (Most often, -I specs for header file
directories.)
Requires --with-intsize=64
--with-wsmp specify WSMP library

Some influential environment variables:
Expand Down Expand Up @@ -27820,6 +27837,133 @@ else
HAVE_WSMP_FALSE=
fi

#########
# CUDSS #
#########

{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for package cuDSS (Requires --with-intsize=64)" >&5
printf %s "checking for package cuDSS (Requires --with-intsize=64)... " >&6; }








coin_has_cudss=noInfo
if test x"$COIN_SKIP_PROJECTS" != x ; then
for pkg in `echo $COIN_SKIP_PROJECTS | tr '[:upper:]' '[:lower:]'` ; do
if test "$pkg" = "cudss" ; then
coin_has_cudss=skipping
fi
done
fi


if test "$coin_has_cudss" != skipping ; then



if test $intsize = 64 ; then
# Check whether --with-cudss was given.
if test ${with_cudss+y}
then :
withval=$with_cudss;
fi



# Check whether --with-cudss-lflags was given.
if test ${with_cudss_lflags+y}
then :
withval=$with_cudss_lflags;
fi

coin_has_cudss=requested

cudss_lflags=


withval="$with_cudss"
if test -n "$withval" ; then
case "$withval" in
no )
coin_has_cudss=skipping
cudss_failmode='command line'
;;
yes )
coin_has_cudss=requested
cudss_failmode=''
;;
* )
coin_has_cudss=requested
cudss_failmode=''
cudss_lflags="$withval"
;;
esac
else
coin_has_cudss=requested
cudss_failmode=''
fi


if test "$coin_has_cudss" != skipping ; then
withval="$with_cudss_lflags"
if test -n "$withval" ; then
case "$withval" in
build | no | yes )
as_fn_error $? "\"$withval\" is not useful here; please specify link flags appropriate for your environment." "$LINENO" 5
;;
* )
coin_has_cudss=yes
cudss_lflags="$withval"
;;
esac
fi
fi
fi


if test "$BUILDTOOLS_DEBUG" = 1 ; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: FIND_PRIM_PKG result for cudss: \"$coin_has_cudss\"" >&5
printf "%s\n" "$as_me: FIND_PRIM_PKG result for cudss: \"$coin_has_cudss\"" >&6;}
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Collected values for package 'cudss'" >&5
printf "%s\n" "$as_me: Collected values for package 'cudss'" >&6;}
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: cudss_lflags is \"$cudss_lflags\"" >&5
printf "%s\n" "$as_me: cudss_lflags is \"$cudss_lflags\"" >&6;}
fi


{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $coin_has_cudss" >&5
printf "%s\n" "$coin_has_cudss" >&6; }


if test "$coin_has_cudss" != yes ; then
coin_has_cudss=no
fi


if test $coin_has_cudss = yes; then
HAVE_CUDSS_TRUE=
HAVE_CUDSS_FALSE='#'
else
HAVE_CUDSS_TRUE='#'
HAVE_CUDSS_FALSE=
fi



if test $coin_has_cudss = yes ; then

printf "%s\n" "#define IPOPT_HAS_CUDSS 1" >>confdefs.h

IPOPTLIB_LFLAGS="$cudss_lflags $IPOPTLIB_LFLAGS"


fi

fi

#############################################################################
# Stuff for examples #
Expand Down Expand Up @@ -29909,6 +30053,10 @@ if test -z "${HAVE_WSMP_TRUE}" && test -z "${HAVE_WSMP_FALSE}"; then
as_fn_error $? "conditional \"HAVE_WSMP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${HAVE_CUDSS_TRUE}" && test -z "${HAVE_CUDSS_FALSE}"; then
as_fn_error $? "conditional \"HAVE_CUDSS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${BUILD_INEXACT_TRUE}" && test -z "${BUILD_INEXACT_FALSE}"; then
as_fn_error $? "conditional \"BUILD_INEXACT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
Expand Down
19 changes: 19 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,25 @@ fi

AM_CONDITIONAL([HAVE_WSMP],[test $have_wsmp = yes])

#########
# CUDSS #
#########

AC_ARG_WITH([cudss],
AS_HELP_STRING([--with-cudss],[specify cuDSS library]),
[have_cudss=yes; cudss_lflags=$withval],
[have_cudss=no])

if test $have_cudss$precision$intsize = yesdouble32 ; then
AC_COIN_TRY_LINK([cudss],[$cudss_lflags],[],
[IPOPTLIB_LFLAGS="$cudss_lflags $IPOPTLIB_LFLAGS"
AC_DEFINE(IPOPT_HAS_CUDSS,1,[Define to 1 if cuDSS is available])
],
[AC_MSG_ERROR([Symbol cuDSS not found with cuDSS flags $cuDSS_lflags. See config.log for details on failed checks.])])
fi

AM_CONDITIONAL([HAVE_CUDSS],[test $have_cudss = yes])

#############################################################################
# Stuff for examples #
#############################################################################
Expand Down
1 change: 1 addition & 0 deletions examples/hs071_f/hs071_f.f.in
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ C Set a string option
C
IERR = IPADDSTROPTION(IPROBLEM, 'mu_strategy', 'adaptive')
if (IERR.ne.0 ) goto 9990

C
C Set an integer option
C
Expand Down
2 changes: 2 additions & 0 deletions libCuDSS/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
libcuDSS4Ipopt.so:
nvcc -G -g --shared --compiler-options -fPIC -I/home/antonio/Ipopt_cuDSS/src/Algorithm/LinearSolvers cuDSS_wrapper.cu -o libcuDSS4Ipopt.so -lcudss
Loading