brief update: babel struct support for fortran and raw-arrays stefan muszala svetlana g. shasharina,...

6
Brief Update: BABEL Struct Support for Fortran and raw-arrays Stefan Muszala Svetlana G. Shasharina, John Cary, Nanbor Wang, Rooparani Pundaleeka, Scott Kruger, Alexander Pletzer, Srinath Vadlamani,Ammar Hakim July 19, 2007 Funded by DOE (TASCS) Grant No DE-FC02-07ER25805 and Tech-X

Upload: erick-daniels

Post on 13-Dec-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Brief Update: BABEL Struct Support for Fortran and raw-arrays Stefan Muszala Svetlana G. Shasharina, John Cary, Nanbor Wang, Rooparani Pundaleeka, Scott

Brief Update: BABEL Struct Support for

Fortran and raw-arrays

Stefan MuszalaSvetlana G. Shasharina, John Cary,

Nanbor Wang, Rooparani Pundaleeka, Scott Kruger, Alexander Pletzer, Srinath Vadlamani,Ammar Hakim

July 19, 2007

Funded by DOE (TASCS) Grant No

DE-FC02-07ER25805 and Tech-X

Page 2: Brief Update: BABEL Struct Support for Fortran and raw-arrays Stefan Muszala Svetlana G. Shasharina, John Cary, Nanbor Wang, Rooparani Pundaleeka, Scott

--> We are providing the Fortran bindings for struct interoperability using the F2003 iso_c_binding module (SBIR).

--> Some of our codes (FACETS Transport Solvers) require the convenience and performance of an rarray within a Babel Struct for F90/C++ Interoperability (TASCS) .

--> Babel, Python and C++. FACETS+uEdge integration.

Current Babel Work:

Page 3: Brief Update: BABEL Struct Support for Fortran and raw-arrays Stefan Muszala Svetlana G. Shasharina, John Cary, Nanbor Wang, Rooparani Pundaleeka, Scott

module addRand_fStruct_SPM_Mod use,intrinsic :: iso_c_binding, only:c_double,c_int,c_ptr,c_f_pointer use sidl_double_array type,bind(c) :: fStruct

real(c_double) :: dThing integer(c_int) :: iLen

type(c_ptr) :: dArray end type fStruct

call c_f_pointer(testfStruct%dArray,dArrPtr,(/nTest+offset/))

dArrPtr(offset+i)=dArrPtr(offset+i)*5.0

BIND© We are implementing Bind© to complete C/F90 and C++/F90 struct bindings.

Prototypes using existing SIDL and BABEL are completeFor Primitive Types and the Array Type--> Currently

Modifying Babel Code-gen.

Page 4: Brief Update: BABEL Struct Support for Fortran and raw-arrays Stefan Muszala Svetlana G. Shasharina, John Cary, Nanbor Wang, Rooparani Pundaleeka, Scott

• Command Line Option to Babel or Fortran macros?

•Can use array API on Caller side and get performance of direct access on Callee side.

•Also want to retain array API on Callee side-needs work.

•C_PTR allows access to nested derived types.

BIND© We are implementing Bind© to complete C/F90 and C++/F90 struct

bindings.

Page 5: Brief Update: BABEL Struct Support for Fortran and raw-arrays Stefan Muszala Svetlana G. Shasharina, John Cary, Nanbor Wang, Rooparani Pundaleeka, Scott

Rarrays - Our approach to modifying the Babel parser to accept raw-arrays within

structs (Semantics).

1) Check JJTSTRUCTITEM for instance of Rarray, Mark corresponding JJTSTRUCT (ParseTree2ASTVisitor)

2) Check JJTSCOPEDID’s for instance of Argument and if they are “OUT” mode…mark them (ParseTree2ASTVisitor).

3) Add visitor classes that check AST for Marked Structs that match marked ScopedIDs. Throw exception if found.

•Example Sidl File:package addRand version 1.0{ struct cppStruct{ int len; rarray<double> cArr(len) };

class modStruct{ cppStruct doWork(inout cppStruct S1); double doStuff(out cppStruct S2); } }

•Status– Needs Testing– Add Regression Tests.

Page 6: Brief Update: BABEL Struct Support for Fortran and raw-arrays Stefan Muszala Svetlana G. Shasharina, John Cary, Nanbor Wang, Rooparani Pundaleeka, Scott

Rarrays - How do we deal with reference counting?

• RULE: Only the caller can create, destroy or copy a struct containing a raw-array.

• How to enforce? Dissallow nested method calls passing the same struct?

• Leave up to user?

• Ideas?