IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft rend disponible en open source des composants majeurs de son moteur de recherche Bing
D'autres modules seront publiés au fur et à mesure

Le , par Stéphane le calme

49PARTAGES

9  0 
Sous la houlette de Satya Nadella qui semble lui avoir insufflé une énergie nouvelle, Microsoft prend une direction nouvelle : après avoir embrassé Linux (notamment en apportant le shell Unix Bash à Windows 10 ou en projetant de rendre disponible SQL Server 2016 cette année sur Linux) ou s’être lancé dans un processus d’ouverture (disponibilité de ses solutions Office sur l’écosystème iOS, développement de projet pour faciliter le portage d’applications tierces vers Windows 10 comme avec son projet Islandwood - pour faciliter le portage d’application iOS vers Windows 10), Microsoft continue son avancée dans le monde de l’open source.

Sa dernière progression dans ce domaine est la mise en open source de composants majeurs de Bing, son moteur de recherche. Parmi ces composants figure BitFunnel, une bibliothèque haute-performance pour des recherches de texte sur internet. BitFunnel est basé sur un algorithme probabiliste qui identifie et classe les documents en fonction de requêtes impliquant des mots-clés, des phrases et des expressions mathématiques.

Dans un billet de blog, Michael Hopcroft, un ingénieur Microsoft qui a été parmi les premiers à avoir participé au développement de BitFunnel, a partagé des moment-clés dans le développement de BiFunnel et a invité la communauté open source à rejoindre les développeurs de BitFunnel. Microsoft a décidé de commencer le projet avec un dépôt vide dans lequel seraient apportés un à un des modules BitFunnel, l’objectif étant d’évoluer progressivement avec la communauté.

Sur le dépôt GitHub de BitFunnel, trois projets majeurs sont listés. Le premier est BiFunnel, désigné comme étant un « moteur de recherche bébé ». Le système de recherche / récupération de texte a été posté « dans une disposition d’esprit de développement ouvert, mais rien ici n’a été préparé pour une consommation publique » sans compter que « la documentation n’est pas existante et le code est dans un état incomplet ». Bien entendu, à ce stade il n’est pas encore fonctionnel.

Workbench, une boîte à outils qui va servir à la préparation du texte pour une utilisation de BitFunnel, fait lui aussi partie des trois projets majeurs de BitFunnel. Il s’agit plus précisément ici de convertir les fichiers dump de base de données Wikipedia dans un format lisible par BitFunnel. Le processus de conversion implique de parser les fichiers dump Wikipedia, d'extraire chaque document, de retirer les marqueurs wiki, d'effectuer une analyse de Lucene pour la tokenisation et au final de générer et d'encoder les données au format BitFunnel.

Le dernier projet en date est NativeJIT, une bibliothèque open source multi-plateformes pour des compilations haute performance d’expressions impliquant des structures de données C. Le code généré est alors optimisé avec une attention particulière apportée à l’allocation de registre. Voici un exemple d’un code qui calcule la surface d’un cercle :

Code C++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "NativeJIT/CodeGen/ExecutionBuffer.h" 
#include "NativeJIT/CodeGen/FunctionBuffer.h" 
#include "NativeJIT/Function.h" 
#include "Temporary/Allocator.h" 
  
#include <iostream> 
  
using NativeJIT::Allocator; 
using NativeJIT::ExecutionBuffer; 
using NativeJIT::Function; 
using NativeJIT::FunctionBuffer; 
  
int main() 
{ 
    // Create allocator and buffers for pre-compiled and post-compiled code. 
    ExecutionBuffer codeAllocator(8192); 
    Allocator allocator(8192); 
    FunctionBuffer code(codeAllocator, 8192); 
  
    // Create the factory for expression nodes. 
    // Our area expression will take a single float parameter and return a float. 
    Function<float, float> expression(allocator, code); 
  
    // Multiply input parameter by itself to get radius squared. 
    auto & rsquared = expression.Mul(expression.GetP1(), expression.GetP1()); 
  
    // Multiply by PI. 
    const float  PI = 3.14159265358979f; 
    auto & area = expression.Mul(rsquared, expression.Immediate(PI)); 
  
    // Compile expression into a function. 
    auto function = expression.Compile(area); 
  
    // Now run our expression! 
    float radius = 2.0; 
    std::cout << "The area of a circle with radius " << radius 
              << " is " << function(radius); 
  
    return 0; 
}

Voici le code assembleur généré sur Windows :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
PI_CONSTANT: 
   db 0f 49 40                              ; PI constant is stored in memory. 
ENTRY_POINT: 
  sub         rsp,8                         ; Standard function prologue. 
  mov         qword ptr [rsp],rbp           ; Standard function prologue. 
  lea         rbp,[rsp+8]                   ; Standard function prologue. 
  mulss       xmm0,xmm0                     ; Multiply by radius parameter by itself. 
  mulss       xmm0,dword ptr [29E2A580000h] ; Multiply by PI. 
  mov         rbp,qword ptr [rsp]           ; Standard function epilogue. 
  add         rsp,8                         ; Standard function epilogue.
À l'heure actuelle, le dépôt de NativeJIT est encore au stade rudimentaire. Les fonctions optimisées avec NativeJIT sont supposées ne pas changer quoi que ce soit en dehors du contexte de la fonction. Si ces fonctions appellent d'autres éléments via la méthode CallNode de NativeJIT, il est de la responsabilité du développeur de suivre et de faire face à tous les changements qui se produisent.

Source : GitHub BitFunnel, blog BitFunnel

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de MagnusMoi
Membre éclairé https://www.developpez.com
Le 08/09/2016 à 14:47
Euh ...
Ce ne serait pas du C++ au lieu du C le code de calcul de cercle ?

Sinon c'est une bonne nouvelle cette ouverture !
Est-ce par contre une stratégie de colonisation ? (en imposant ses "technologies" dans le libre)
Je n'ai pas pour l'instant d'y jeter un coup d’œil, mais avec le .Net core, je vais suivre attentivement cette disponibilité de composant de Bing ]
1  0