global array相关

本文介绍如何利用global_array进行多节点内存共享,以解决内存瓶颈问题。内容包括global_array的原理和使用步骤,如何在不改变原有程序逻辑的情况下,让主进程和其他进程协同工作,以及如何将第三方的.c文件引入现有程序,并提供了相应的Makefile示例。
摘要由CSDN通过智能技术生成

1. global_array原理

        把多个节点的分立内存统一编址从而成为一个整体大内存,对用户透明,底层则通过网络发送和接收所需数据,需要和MPI一起使用。大致过程如下:

        初始化: MPI_Init(&argc, &argv); GA_Initialize(); int id = GA_Nodeid(); int n = GA_Nnodes(); 

        创建共享内存:NGA_Create64(C_CHAR, ndim, dims, "handle", chunk);参数分别为元素类型、维数、代表内存大小的数组、内存区域名称和chunk,返回值是int类型的句柄;

        从共享内存中取数据:NGA_Get64(handle, low, high, buf, NULL); 参数分别为标识内存的句柄、索引的上限和下限、取出的数据放入本地的buf;

        往共享内存中放数据:NGA_Put64(handle, low, high, buf, NULL);参数同上,只是共享内存到buf的方向不同;

        结束:GA_Destroy(handle); GA_Terminate(); MPI_Finalize()。

2. 如何解决现有程序内存瓶颈问题

        一般利用global_array都是为了解决单个节点内存不足的问题,所以需要多个节点共享内存。这就不可避免的需要多进程,我们是要在已有的串行代码基础上改,为了不改变程序的逻辑,理想情况是主进程干活,其他进程只把所在节点的内存贡献出来就OK,但为了告诉其他进程要贡献多大的内存,要么其他进程知道context,但这需要其他进程也执行业务逻辑;要么通过mp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值