hiop icon indicating copy to clipboard operation
hiop copied to clipboard

C/Fortran interface

Open jacobwilliams opened this issue 6 years ago • 12 comments

A C/Fortran interface to this would be great. I think it could be added in a similar way that Ipopt has done it.

jacobwilliams avatar Feb 10 '19 20:02 jacobwilliams

it is on my todo list but I am a bit short-handed momentarily. I will keep you posted. Thanks for the interest.

cnpetra avatar Feb 11 '19 15:02 cnpetra

What is the status of this issue?

ashermancinelli avatar Nov 27 '20 21:11 ashermancinelli

open :)

cnpetra avatar Dec 01 '20 00:12 cnpetra

@nychiang : how stage is the Fortran interface?

cnpetra avatar Jul 01 '22 17:07 cnpetra

On the platform with AMD GPU, some compiling error happened when HIOP_BUILD_SHARED is set to ON. The error message is /opt/rocm-4.5.0/amdgcn/bitcode/hip.bc: file not recognized: file format not recognized

This error prevents HiOp creating all the fortran related examples.

nychiang avatar Jul 01 '22 20:07 nychiang

More details: When Cmake links libraries from hip toolchain, e.g., target_link_libraries(hiop_hip INTERFACE hip::device Magma) (Asher's approach) or target_link_libraries(hiop_hip INTERFACE hip::hiprand roc::rocrand hip::hipfft roc::hipblas roc::rocblas hip::hipcub roc::rocprim_hip Magma ) (my modification due to the usage of hiprand), the new ROCm bitcode library /opt/rocm-4.5.0/amdgcn/bitcode/hip.bc needs to be linked. However, it seems that the fortran compiler ftn doesn’t recognize this format and hence we received this error.

A quick solution is that we use flang as the fortran compiler, since this bitcode is build by clang and several llvm development tools (https://github.com/RadeonOpenCompute/ROCm-Device-Libs). Without any change to the existing hiop files, but just setting cmake flag -DCMAKE_Fortran_COMPILER=/opt/rocm-4.5.0/bin/amdflang, all the unit tests work fine as well as the fortran examples.

@pelesh @CameronRutherford have you ever got similar problem like this? Can we use ftn with bitcode library? (hard to find relevant discussions on google)

@cnpetra

nychiang avatar Jul 02 '22 01:07 nychiang

@nychiang, as far as I know we used a combination of clang C++ and gcc Fortran compilers to build HiOp with Fortran interface. My understanding is that ROCm bitcode library is specific to the clang intermediate representation and won't work with gcc. If flang is available and mature enough, one should go with that instead of combining different compilers imho.

@ashermancinelli, please chime in.

pelesh avatar Jul 05 '22 03:07 pelesh

@nychiang, as far as I know we used a combination of clang C++ and gcc Fortran compilers to build HiOp with Fortran interface. My understanding is that ROCm bitcode library is specific to the clang intermediate representation and won't work with gcc. If flang is available and mature enough, one should go with that instead of combining different compilers imho.

@ashermancinelli, please chime in.

PR #514 adds a partial fix and allows using flang compiler on the problematic AMD/ROCm machine. Some investigation is needed to figure out use of gfortran. Nvidia/CUDA machines work fine with generic Fortran compilers.

cnpetra avatar Jul 13 '22 17:07 cnpetra

The following Fortran examples are given: For sparse linear system: https://github.com/LLNL/hiop/blob/develop/src/Drivers/Sparse/NlpSparseExHS071.f https://github.com/LLNL/hiop/blob/develop/src/Drivers/Sparse/NlpSparseFEx1.f For dense linear system: https://github.com/LLNL/hiop/blob/develop/src/Drivers/Dense/NlpDenseConsFEx1.f

nychiang avatar Jul 26 '22 05:07 nychiang

This is great! But can the examples be written in modern Fortran? I don't think there is any reason to use the F77 format nowadays. Do you need some assistance with doing that?

jacobwilliams avatar Jul 26 '22 12:07 jacobwilliams

This is what I have in mind: https://github.com/jacobwilliams/hiop/blob/modern-fortran/src/Drivers/Dense/NlpDenseConsFEx1.f90

jacobwilliams avatar Jul 26 '22 20:07 jacobwilliams

This is what I have in mind: https://github.com/jacobwilliams/hiop/blob/modern-fortran/src/Drivers/Dense/NlpDenseConsFEx1.f90

We would be supportive of also using more recent Fortran for examples. Please feel free to take a shot and PR, our experience with Fortran is limited.

In the meanwhile I suggest we close this issue and open an issue re: examples in modern Fortran.

cnpetra avatar Aug 08 '22 04:08 cnpetra

Will close this and we track the developement of a more modern F examples in isssue #532

cnpetra avatar Aug 24 '22 17:08 cnpetra