JNI学习2
2013-04-11 14:41
232 查看
简单的ByteBuffer调用和使用MPI交换参数
程序设计:用ByteBuffer.allocateDirect() 接口分配两个等长的内存空间(addr1和addr2),在JNI中使用GetDirectBufferAddress接口获得两个内存空间的地址,通过MPI的MPI_Isend/MPI_Recv接口,将addr1中的数据传递到addr2中。整个MPI在单进程中执行。
ByteBuff.java
View Code
编译动态库的时候需要链接MPI的静态库(本文使用MVAPICH 1.8.x),编译命令为
gcc -std=c99 -shared -fPIC -I /usr/local/mvapich/include/ -I /usr/local/jdk1.6.0_30/include/ -I /usr/local/jdk1.6.0_30/include/linux/ -I /usr/local/ ByteBuff.c -o libbuff.so -lpthread /usr/local/mvapich/lib/libmpich.a /usr/local/mvapich/lib/libopa.a /usr/local/mvapich/lib/libmpl.a -lrt -lpthread /usr/local/mvapich/lib/libmpich.a /usr/local/mvapich/lib/libopa.a /usr/local/mvapich/lib/libmpl.a -lrt
执行结果
程序设计:用ByteBuffer.allocateDirect() 接口分配两个等长的内存空间(addr1和addr2),在JNI中使用GetDirectBufferAddress接口获得两个内存空间的地址,通过MPI的MPI_Isend/MPI_Recv接口,将addr1中的数据传递到addr2中。整个MPI在单进程中执行。
ByteBuff.java
View Code
#include "ByteBuff.h" #include <stdio.h> #include <stdlib.h> #include <mpi.h> JNIEXPORT void JNICALL Java_ByteBuff_printBuff (JNIEnv *env, jobject jobj, jobject sbuf,jobject rbuf) { jbyte* sbufp=(*env)->GetDirectBufferAddress(env,sbuf); jbyte* rbufp=(*env)->GetDirectBufferAddress(env,rbuf); MPI_Request sreq,rreq; MPI_Status sstatus,rstatus; MPI_Init(NULL,NULL); MPI_Isend(sbufp,3,MPI_BYTE,0,0,MPI_COMM_WORLD,&sreq); MPI_Recv(rbufp,3,MPI_BYTE,0,0,MPI_COMM_WORLD,&rstatus); MPI_Wait(&sreq,&sstatus); MPI_Finalize(); (*env)->ReleasePrimitiveArrayCritical(env,sbuf,sbufp,0); (*env)->ReleasePrimitiveArrayCritical(env,rbuf,rbufp,0); }
编译动态库的时候需要链接MPI的静态库(本文使用MVAPICH 1.8.x),编译命令为
gcc -std=c99 -shared -fPIC -I /usr/local/mvapich/include/ -I /usr/local/jdk1.6.0_30/include/ -I /usr/local/jdk1.6.0_30/include/linux/ -I /usr/local/ ByteBuff.c -o libbuff.so -lpthread /usr/local/mvapich/lib/libmpich.a /usr/local/mvapich/lib/libopa.a /usr/local/mvapich/lib/libmpl.a -lrt -lpthread /usr/local/mvapich/lib/libmpich.a /usr/local/mvapich/lib/libopa.a /usr/local/mvapich/lib/libmpl.a -lrt
执行结果
$ mpiexec -n 1 java -Djava.library.path=. ByteBuff Before swap Before swap b
相关文章推荐
- JNI 学习备忘
- Android(java)学习笔记260:JNI之native方法头文件的生成
- JNI学习笔记之:锅炉压力监控测试Demo
- 【学习Android NDK开发】Java通过JNI调用native方法
- android JNI学习之六 JNI的一个框架
- android JNI学习之一
- 一步一步学习JNI
- jni学习
- Android JNI学习之javah命令的正确使用(找了好半天才找到的,汉,网上好多说法都没用)
- JNI学习1
- Android JNI和NDK学习(01)--搭建NDK开发环境
- JNI学习2:android 调用C语言方法与C语言调用android方法
- ICTCLAS2011_JNI学习笔记-ICTCLAS_ImportUserDictFile及ICTCLAS_SaveTheUsrDic接口
- 【Android-jni】JNI学习第一天
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- 技术转载:Jni学习四:如何编写jni方法
- (五)JNI学习之C语言基础,typedef与宏定义
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
- 【转】JNI学习积累之一 ---- 常用函数大全
- Android开发学习之路--NDK、JNI之初体验