【问题标题】:MPI Autocompletion in Visual Studio CodeVisual Studio Code 中的 MPI 自动完成
【发布时间】:2022-01-26 00:24:00
【问题描述】:

我正在尝试使用 Visual Studio Code 开发 Fortran MPI 程序。但是,虽然我可以很好地成功构建和运行它们,但如果我可以为 MPI(以及其他外部模块)使用智能感知/自动完成功能,这对我将非常有帮助。我的settings.json 中有/usr/lib/openmpi/(包含mpi_f08.mod)作为fortran.includePaths 的一部分。但是,当我 use mpi_f08 时,我从 VS Code Module "mpi_f08" not found in project 收到问题消息。这是一个最小的 CMake 构建示例:

! hello.f90
program hello
    use mpi_f08
    implicit none

    integer :: ierror, nproc, my_rank

    call MPI_Init()
    call MPI_Comm_size(MPI_COMM_WORLD, nproc, ierror)
    call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierror)

    print*, "hello from rank ", my_rank

    call MPI_Finalize()

end program hello
# CMakeLists.txt
cmake_minimum_required(VERSION 3.12)
project(hello_mpi)
enable_language(Fortran)

find_package(MPI REQUIRED)

add_executable(hello_mpi hello.f90)
include_directories(${MPI_Fortran_INCLUDE_PATH})
target_link_libraries(hello_mpi PUBLIC ${MPI_Fortran_LIBRARIES})

我希望能够 (i) 摆脱警告/消息,更重要的是 (ii) 当我按下 CTRL+空格时启用来自 MPI 的建议,就像我从内部模块调用一样。

【问题讨论】:

  • 这是英特尔 oneAPI?
  • 我正在使用 gfortran(以及 VSCode 中的“现代 Fortran”扩展,虽然我不介意使用另一个)。

标签: visual-studio-code fortran mpi


【解决方案1】:

我将发布部分答案,因为它总比没有好,希望这可以帮助其他人和/或让其他人能够完全回答我的问题。

问题似乎与 Fortran 语言服务器有关,可以通过添加 .fortls JSON 文件进行配置,如其 Github README 中所述:https://github.com/hansec/fortran-language-server

我添加了以下内容,它不仅可以找到本地模块,还可以找到 MPI(以及外部模块 json-fortran):

{
  "source_dirs": ["src", "."],
  "ext_source_dirs": [
      "/path/to/json-fortran/src", 
    "/path/to/openmpi-4.1.2/ompi/mpi/fortran/use-mpi-f08",
]
}

这并没有捕获json-fortran 中的所有函数,我认为这是因为它的.inc 文件,因为它在自动完成时没有给我像json_file::get 这样的函数指针。

至于 MPI,这种方法很有效,因为它提供了我能想到需要的所有功能,但在其末尾附加了 _f08。我不知道 OpenMPI 的内部工作原理,但我想例如出于向后兼容性的原因,MPI_Init 包装了 MPI_Init_f08。现在我可以简单地自动完成_f08 版本并手动删除该位。 (我也尝试添加 openmpi-4.1.2/ompi/mpi/fortran/use-mpi-tkropenmpi-4.1.2/ompi/mpi/fortran/mpif.h 但没有运气)。

如果能对这个细节进行排序就好了。我现在必须手动包含源目录也有点烦人(删除它会使其找不到本地模块)。

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2018-07-18
    • 2020-12-28
    • 1970-01-01
    • 2017-05-20
    • 2022-07-17
    相关资源
    最近更新 更多