Interfacing Excel with The Grid

publicité
Interfacing Excel
with The Grid
Jeremy Serror
Financial library Interfaces
XML Exportation
Remote Execution
Interfacing Excel with the grid
Introduction
Les interfaces de la librairie
- Deux interfaces classiques XLL et COM
- Une nouvelle interface XML+JNI
Représentation des calculs en XML
- Exportation à partir d’Excel
- Arbre d’appels
Client – Serveur: Excel
Futur: Sensibilités et grille de calcul
2/28
Projet Hedge - ANR-05-CIGC-GCMPF
Introduction
Microsoft Excel: un standard en banques
d’investissement
- Excel comme client d’une grille de calcul
- Price-it librairie d’extension (add-in)
Une nouvelle interface à la librairie est
nécessaire
- JNI
Représentation des calculs en XML
L’exécution à distance d’appels à la librairie
- Première étape vers le grid computing
3/28
Projet Hedge - ANR-05-CIGC-GCMPF
Utilisation d’Excel avec une librairie de valorisation
(Price-it)
Price-it
- Une libraire de valorisation de produits dérivés
- Code C++ interfacé avec Excel
Excel
- On peut appeler les fonctions Price-It depuis Excel
•
4/28
Comment exécuter ces appels à distance en vue d’une
distribution?
Projet Hedge - ANR-05-CIGC-GCMPF
Les interfaces en standard XLL et COM
Deux interfaces à la librairie sont
couramment utilisées en banques: XLL et
COM
- XLL: Une interface spécifique à Excel : interaction totale
en Excel et le code C++
- Une fonction C++ est exposée dans Excel grâce à un
fichier de description:
" XLL_MktData_ZcCrv_Create", /// function name
" RRRRRRRRRRRRRR",
///14 arguments = 13 inputs + 1 output
" PILX_MktData_ZcCrv_Create", /// exported name
" [asOfDate],ccy,dataTickers,dataValues [..] for optional
XLL_PIL_MKTDATA_GROUP,
" Creates a bootstraped par interest curve "
" as of date
DEFAULT = ExcelTodayDate() ",
5/28
Projet Hedge - ANR-05-CIGC-GCMPF
L’Interface XLL
XLOPER le type de données d’Excel
- Polymorphisme
•
10 octets = 2 octets pour le type + 8 octets de données
- Conversion requise entre XLOPER et les types C++
•
Le rôle principal du wrapper est d’effectuer cette conversion
xltypeNum
xltypeStr
xltypeBool
xltypeRef
xltypeErr
xltypeFlow
xltypeMulti
xltypeMissing
xltypeNil
xltypeSRef
xltypeInt
xltypeBigData
6/28
Numeric (IEEE floating-point)
String (byte-counted)
Logical (TRUE or FALSE)
General reference (external and/or disjoint)
Error
Flow control in a macro
Array
Missing argument in a function call
None (for example, an empty cell)
Single rectangular reference to current sheet
Integer
Persistent data storage
Projet Hedge - ANR-05-CIGC-GCMPF
Le wrapper XLL
__declspec(dllexport) LPXLOPER WINAPI
XLL_MktData_ZcCrv_Create(
LPXLOPER xl_asOfDate, LPXLOPER xl_ccy, LPXLOPER xl_dataTickers,
…)
{
static XLOPER xl_result;
/// read inputs
double asOfDate_double;
XLOperManip::XL_readNumCell(
xl_asOfDate,asOfDate_double);
string ccy;
XLOperManip::XL_readStrCell( xl_ccy, ccy);
/// . . .
/// The C++ function in now called
PIL_RootObjectPtr result =
MktData_ZcCrv_Create(
asOfDate, ccy, dataTickers, …);
AssignObjectToCurrentCell( result, xl_result );
return (LPXLOPER) &xl_result;
}
7/28
Projet Hedge - ANR-05-CIGC-GCMPF
L’interface COM et le type VARIANT
L’interface COM
Deux wrappers sont requis
- Un pour l’appel C++ (VARIANT <–> C++)
- Un pour l’appel depuis Excel (nécessité de passer par
VBA)
COM permet l’exécution à distance
- Non portable (technologie Microsoft)
- Difficile de l’utiliser une grille Unix
Une nouvelle interface est nécessaire…
8/28
Projet Hedge - ANR-05-CIGC-GCMPF
L’interface JNI
Utilisation de Java
- Cross-platform
- Utilisation de ProActive
- Facilite l’utilisation d’XML
La Java Native Interface
- Appel du code C++ depuis Java
- Un wrapper est requis (JObject <–> C+)
Trois interfaces existent
- Génération automatique des interfaces
- Généricité possible vis-à-vis de la librairie
9/28
Projet Hedge - ANR-05-CIGC-GCMPF
Génération des interfaces
Addins generator
- Parcours du code C++
- Récupère les informations dans les commentaires (ala
Doxygen)
- Génère les fichiers de description Excel et les 3
wrappers
10/28
Projet Hedge - ANR-05-CIGC-GCMPF
Le code généré
////////////////////////////////////////////////// C++
/// EXPORT_FUNCTION_DEF
///
Category
: XLL_PIL_MKTDATA_GROUP
///
Description
: Creates a bootstraped par interest curve
//////////////////////////////////////////////////
GENERICPRICER_API PIL_RootObjectPtr MktData_ZcCrv_Create(
const PIL_Date& asOfDate, /// as of date ;DEFAULT=ExcelTodayDate()
const string& ccy
/// currency of the curve
C++
__declspec(dllexport) LPXLOPER WINAPI XLL_MktData_ZcCrv_Create(
XLL
LPXLOPER xl_asOfDate, LPXLOPER xl_ccy, …)
{
static XLOPER xl_result;
C++
double asOfDate_double;
XLOperManip::XL_readNumCell( xl_asOfDate, asOfDate_double);
PIL_Date asOfDate = ConvertXLDateToJulian( asOfDate_double );
PIL_RootObjectPtr result = MktData_ZcCrv_Create( asOfDate, ccy,..);
JNIEXPORT jobject JNICALL
JNI
Java_xmlpil_jni_PIMAddinsProxy_MktData_1ZcCrv_1Create(JNIEnv *env, jclass
jcl, jobject jasOfDate, jobject jccy, … )
{
jobject jresult;
double asOfDate_double = ReadDouble(env, jasOfDate );
string ccy = ReadString(env, jccy );
PIL_RootObjectPtr result = MktData_ZcCrv_Create( asOfDate, ccy,..);
11/28
Projet Hedge - ANR-05-CIGC-GCMPF
Bilan sur les interfaces
Core Library C++
XLL
J Object
COM
Http Server
VBA
Http Client
J NI
XML
XLOPER
VARIANT
Microsoft Excel
Three interfaces are available: XLL, COM and J NI
12/28
Projet Hedge - ANR-05-CIGC-GCMPF
XML : représentation indépendante des interfaces
Un schéma XML simple
- Permet de communiquer avec la libraire quelque soit
l’interface choisie
- Contient données et appels de fonctions : distribution
des calculs
<pil_addin name="MktData_ZcCrv_Create">
<pil_parameters>
<pil_parameter name="asOfDate" type="data" value="38828" />
<pil_parameter name="ccy" type="data" value="EUR" />
<pil_parameter name="mktNames" type="array" rows="31" cols=
<item type="data" value="2D" />
<item type="data" value="1M" />
</pil_parameter>
<pil_parameter name="mktData" type="array" rows="31" cols="1
<item type="data" value="2.07" />
<item type="data" value="2.1375" />
</pil_parameter>
</pil_parameters>
</pil_addin>
13/28
Projet Hedge - ANR-05-CIGC-GCMPF
Exportation XML
Exportation depuis Excel
- Parcours récursif des appels de fonctions
- Extraction de la représentation XML
- Envoi vers un serveur JAVA/JNI/C++
Un problème à résoudre: les références
- Les objets C++ ne sont pas sérialisables
- Exporter plusieurs appels en un seul message
14/28
•
Limite les allers-retours Client-Server
•
Permet de représenter le calcul d’un prix de manière autosuffisante
Projet Hedge - ANR-05-CIGC-GCMPF
Les références et l’arbre XML
Un objet C++ n’est pas sérialisable
directement
- Dans Excel, on retourne une chaîne de caractères ID
- Association d’une adresse interne au résultat d’une
fonction
- Le serveur Java effectue la « conversion » des adresses
<pil_addin name="MktData_ZcCrv_Create" address="74">
XML
<pil_parameters>…</pil_parameters>
</pil_addin>
<pil_addin name="Apply_Shift" address="76">
<pil_parameters>
<pil_parameter name="bumpValue" type="data" value="0.1" />
<pil_parameter name="curve" type="inref" value="74" />
</pil_parameters>
</pil_addin>
15/28
Projet Hedge - ANR-05-CIGC-GCMPF
Le Client-Serveur Java
Excel est prêt pour le grid computing
- Amélioration: Export XML indépendant
d’Excel(intégration dans la librairie)
- ProActive: Prototype réalisé, remplacement de la
communication HTTP par appel de méthodes sur Objet
Actifs
Http Client
(C#)
Excel
XML Message
XLL
Client
Side
16/28
Projet Hedge - ANR-05-CIGC-GCMPF
HTTP
Server
(J ava)
XML Parser
(J ava)
J NI
Proxy for J ava
Native
functions
J VM
Price-It
C++Core
DLL
La suite du projet
Scénarios de sensibilités
- Transfert en XML, expansion des scénarios dans la grille
- Découpage générique des calculs
Distribution des calculs
- Réception des scénarios par un master
- Expansion en pricings, puis ventilation sur les masters
- Etude théorique des politiques d’ordonnancement
•
Divisible Load Theory
- Expérimentation à grande échelle
17/28
Projet Hedge - ANR-05-CIGC-GCMPF
Prototype et premiers résultats
Un prototype simple distribue des calculs
de
prix
Client
Client
Client
Calcul d'un scenario de 40 prix
7
Scé
nar
io
J ob of
Client 2
J ob of
Client 2
6
Master
Result for
client 1
Découpage XML
Result for
client 3
Contrôle des workers
J ob of
Client 1
Ordonnancement des calculs
J ob of
Client 1
5
Speed-up
J ob of
Client 5
Prix
WQ
ulés
calc
4
3
2
HTTP Server
(J ava)
HTTP Server
(J ava)
1
J NI
J NI
0
Price-It
C++Core
18/28
Workers
Price-It
C++Core
Projet Hedge - ANR-05-CIGC-GCMPF
0
1
2
3
4
Nombre de workers
5
6
7
Conclusion
Trois interfaces à la librairie
- Génération automatique
- Instanciation de la librairie en environnement UNIX et
Windows
Représentation self-contained XML
- Données et calculs dans un message XML
- Distribution de calculs indépendants
Un client server en Java
- Première étape du grid computing
- Evolution vers ProActive
Merci
19/28
Projet Hedge - ANR-05-CIGC-GCMPF
Téléchargement