global array相关
来源:互联网 发布:怎么禁止电脑休眠mac 编辑:程序博客网 时间:2024/05/17 06:18
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,但这需要其他进程也执行业务逻辑;要么通过mpi发送接收创建内存的参数,开销比较大。所以我们在程序的最开始,根据num_proc和每个节点最大能贡献的内存(不是全部内存,还要预留一定空间给上面说的buf使用)申请一块很大的内存,然后已有代码中所有大内存申请的地方全部改为从这块大内存中申请,由我们管理这块内存的使用。
3. 第三方的.c文件如何加入现有程序
*.h文件中,声明函数定义,使用extern声明变量,不赋值;
*.c文件中,包含*.h头文件,给上述变量赋值,给出上述函数的具体实现。
其他代码使用时,包含*.h头文件即可。
4. makefile如何写
以今天的程序为例,共有三个文件:global_array.h,global_array.c,testGA.c。
test: testGA.o global_array.o
(Tab)mpicc -o test testGA.o global_array.o -lga -lgfortran
testGA.o: testGA.c global_array.h
(Tab)mpicc -c testGA.c -std=c99
global_array.o: global_array.c global_array.h
(Tab)mpicc -c global_array.c -std=c99
- global array相关
- 038.Global Array 全局数组
- 038.Global Array 全局数组
- javascript的几个未知 (Array,Global)
- mysql show (global) status 命令相关
- rotate array相关
- JS array相关方法
- Java之Array相关
- global
- 测试 js array 相关方法
- array相关函数大演练
- git config --global push.default simple 的相关解读
- cuda 函数前缀:device/global/host 相关问题
- JavaScript中Date,Math,Global,Number等对象的浅析,Array数组对象的解析
- 一些PHP数组array相关函数介绍
- php array相关函数个人小结
- boost::array 数组 容器相关的
- C# array类的相关方法
- RAID 5
- LINUX SHELL 注释
- grep and awk and print
- FREE 查看内存信息
- Golden Gate及容灾
- global array相关
- Advance Replication、Goldengate, Dataguard, Stream 联系与区别
- 详解Linux中Load average负载
- linux 学习日记基础(转)
- scp拷贝远程host的文件到本地
- Physical read + Logical read(DB block gets ,consistent gets )
- 在外键末加索引的情况下,可能带来的问题
- 将文件存为blob或者bfile字段
- linux 表达式(= <> > < >= <=)