小编vov*_*ovo的帖子

Fortran中的STL模拟

基础:我有非常大的并行Fortran90/MPI程序,它代表了复杂的物理模型.我想为它添加新功能:例如,我需要组织消息队列,在某处引入mergesort并使用哈希表.

问题:我知道如何写自己的哈希表,创建队列和代码合并,但我不认为发明一辆自行车是个好主意.

问题: Fortran大师在这种情况下应该做些什么?我是否应该构建与Fortran的C++类绑定并使用STL实现逻辑,或者您可以建议一些类似Fortran STL的库?谢谢.

c++ fortran stl

13
推荐指数
1
解决办法
1751
查看次数

MPI_SEND占据了虚拟内存的很大一部分

在大量内核上调试我的程序,我遇到了非常奇怪的错误insufficient virtual memory.我的调查导致代码的和平,主机向每个从机发送小消息.然后我写了一个小程序,其中1个master只发送10个整数,MPI_SEND所有从属接收它MPI_RECV./proc/self/status前后文件的比较MPI_SEND表明,内存大小之间的差异是巨大的!最有趣的事情(崩溃我的程序)是,这个内存不会释放后MPI_Send仍然占用大量空间.

有任何想法吗?

 System memory usage before MPI_Send, rank: 0
Name:   test_send_size                                                                                
State:  R (running)                                                                                  
Pid:    7825                                                                                           
Groups: 2840                                                                                        
VmPeak:   251400 kB                                                                                 
VmSize:   186628 kB                                                                                 
VmLck:        72 kB                                                                                  
VmHWM:      4068 kB                                                                                  
VmRSS:      4068 kB                                                                                  
VmData:    71076 kB                                                                                 
VmStk:        92 kB                                                                                  
VmExe:       604 kB                                                                                  
VmLib:      6588 kB                                                                                  
VmPTE:       148 kB                                                                                  
VmSwap:        0 kB                                                                                 
Threads:    3                                                                                          

 System memory usage after MPI_Send, rank 0
Name:   test_send_size                                                                                
State:  R (running)                                                                                  
Pid: …
Run Code Online (Sandbox Code Playgroud)

linux mpi infiniband intel-mpi

7
推荐指数
2
解决办法
1936
查看次数

增加虚拟内存而不增加VmSize

我在谷歌和这个网站上搜索了我的问题,但我仍然不理解解决方案.

我有一些MPI程序哪些RECV数据.程序在大型阵列上崩溃,虚拟内存不足,所以我开始考虑/proc/self/status文件.

之前MPI_RECV:

Name:   model.exe                                                               
VmPeak:   841640 kB
VmSize:   841640 kB
VmHWM:     15100 kB
VmRSS:     15100 kB
VmData:   760692 kB
Run Code Online (Sandbox Code Playgroud)

之后:

Name:   model.exe                                                            
VmPeak:   841640 kB
VmSize:   841640 kB
VmHWM:    719980 kB
VmRSS:    719980 kB
VmData:   760692 kB
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu上测试它并通过系统监视器看到这个内存增加了.但我很困惑,VmSize(和VmPeak)参数没有变化.

问题是 - 实际内存使用情况的指标是什么?

这是真的指标VmRSS吗?(并且VmSize仅分配但仍未使用内存)

linux fortran mpi

3
推荐指数
1
解决办法
1万
查看次数

一个指针针对不同类型的Fortran

我正在尝试编写一个过程,该过程存储用户数组的地址以供进一步处理.问题被封装在这个测试程序中:

program test_ptr
    real(4), target, allocatable :: i4(:,:)
    real(8), target, allocatable :: i8(:,:)
    real(4), pointer :: p(:,:)

    allocate(i4(2,2))
    allocate(i8(2,2))

    p => i4 ! ok
    p => i8 ! compile error
end 
Run Code Online (Sandbox Code Playgroud)

编译器建议为不同类型制作不同的指针.但我不想为real(4)和real(8)创建单独的指针.我试图制作通用和紧凑的解决方案,并有一个指针用于不同类型的数据.可能吗?

fortran pointers

1
推荐指数
1
解决办法
233
查看次数

标签 统计

fortran ×3

linux ×2

mpi ×2

c++ ×1

infiniband ×1

intel-mpi ×1

pointers ×1

stl ×1