5 votes

Débutant ILNumérique : i

Je suis très intéressé par ILNUmerics et j'aimerais essayer la version gratuite, mais je rencontre des difficultés.

J'ai commencé avec une application console et j'ai essayé d'exécuter l'application console 'hello ilnumerics' mais j'ai remarqué que VS ne trouve pas les bibliothèques MKL.

J'utilise VS2012 sous Windwos 8 (via Bootcamp sur un MacBook Pro mi-2010 ; si cela est pertinent) ; j'ai installé l'extension NuGet Packages depuis la solution Project. Ensuite, un clic droit sur les références dans l'explorateur de solutions, 'Manage Nu Get Packages', fron online/search a trouvé ilnumerics dans différentes versions. J'ai choisi 'ILNumerics' et l'ai installé. J'ai ajouté 'ILNumerics' et 'ILNumerics.Native' à mon projet. Ensuite, je peux voir ILNumerics sous 'References' dans Solution Explorer et j'ai aussi deux nouveaux dossiers /bin32/ et /bin64/ qui contiennent deux DLLs nommées : libiomp5md.dll et mkl_custom.dll. J'ai vérifié leur J'ai vérifié leur propriété 'Copy to Ouput Directory' et ils sont tous réglés sur 'Copy if newer'.

Apparemment, mkl_custom est introuvable. J'écris le code suivant, tiré du guide de démarrage rapide :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ILNumerics;

namespace ConsoleApplication3
{

  class Program  : ILMath
{
    static void Main(string[] args)
    {

        ILArray<double> A = array<double>
            (new double[] { 1,1,1,1,1,2,3,4,1,3,6,10,1,4,10,20} ,4, 4);
        ILArray<double> B = counter(4, 2);

        ILArray<double> Result = linsolve(A, B);
        Console.Out.WriteLine("A: " + Environment.NewLine +
                A.ToString());

            Console.Out.WriteLine("B: " + Environment.NewLine + B.ToString());

            Console.ReadKey();
        }
    }
}

et j'obtiens cette exception : Une exception non gérée de type 'System.DllNotFoundException' s'est produite dans ILNumerics.dll.

Informations complémentaires : Impossible de charger la DLL 'mkl_custom' : Le module spécifié n'a pas pu être trouvé. (Exception de HRESULT : 0x8007007E)

Si je n'invoque pas linsolve, la méthode ToString de ILArray fonctionne : si je commente // ILArray Result = linsolve(A, B) ;

J'obtiens les deux matrices imprimées à l'écran.

J'ai également essayé de calculer le déterminant d'une matrice et j'ai obtenu la même exception : apparemment, à chaque fois que j'appelle mkl_custom, VS n'est pas capable de le trouver.

Une aide/un conseil, s'il vous plaît ?

De plus, est-il nécessaire d'installer ILNumerics via NuGet sur chaque projet ajouté à la solution ? Serait-il possible de l'installer localement une fois pour toutes et d'ajouter ensuite la référence si nécessaire ?

3voto

numbers303 Points 376

Deux options :

1) S'assurer que tous les binaires sont accessibles comme prévu : ILNumerics utilise des cibles AnyCPU et choisit le sous-dossier dépendant de la plateforme en ajoutant les répertoires "bin32" / "bin64" à la variable d'environnement PATH au démarrage. Il est possible qu'il y ait un problème sur votre machine ? Vous pouvez vous en assurer en plaçant manuellement les binaires corrects (en fonction de votre plateforme) directement dans le chemin de sortie.

2) Au cas où l'erreur persiste : mkl_custom.dll dépend lui-même de quelques autres dlls. L'une d'entre elles (libiomp5md.dll) est fournie avec le paquet nuget ILNumerics. Les autres sont censés exister sur votre système : KERNEL32.DLL et MSVCR110.DLL. Assurez-vous que vous les avez ! Si la dll du noyau est manquante -> appelez cela un miracle et réinstallez votre système. Si la msvcr110 est manquante -> allez-y aquí et installez le "Visual C++ Redistributable for Visual Studio 2012".

Si le problème persiste, vous pouvez déposer un bug sur le site ILNumerics bugtracker En effet, le runtime devrait être présent, puisque vous avez écrit que vous utilisez VS2012. Il est possible qu'il s'agisse d'un problème de version.

EDIT : Depuis la version 4.0 ILNumerics ne déploie plus les binaires natifs dans le sous-dossier bin32/ bin64/ mais installe toutes les dépendances natives dans le GAC et les dossiers System32/WOW. L'ancien schéma fonctionnera toujours (pour la compatibilité avec les anciens projets). Mais il n'est plus nécessaire de gérer explicitement les dépendances d'ILNumerics. Elles doivent simplement être trouvées au moment de l'exécution.

0voto

Matt Points 61

Comme le dit le numéro 303, ILNumerics.dll ne trouve pas une dépendance nécessaire. Vous pouvez corriger cette dépendance par force brute en copiant les DLL requises dans le même répertoire que ILNumerics.dll en tant qu'étape post-construction, mais je pense qu'il existe une solution plus élégante.

Une solution VS2010 .NET console est créée par défaut avec la configuration x86. La compilation et l'exécution du code Hello ILNumerics ! de l'exemple ILNumerics avec cette configuration entraîne une exception DLL introuvable (mkl_custom.dll).

Le fait de recibler la solution via le gestionnaire de configuration sur "N'importe quelle unité centrale" a réglé le problème pour moi : Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur la solution et sélectionnez Propriétés. Sélectionnez Configuration Properties et cliquez sur le bouton Configuration Manager... dans le coin supérieur droit. Assurez-vous que l'option "Any CPU" est sélectionnée pour le projet qui utilise ILNumerics. Si l'option "Any CPU" n'est pas disponible, sélectionnez "" dans la liste déroulante et créez une plate-forme "Any CPU" basée sur votre plate-forme actuelle. En général, cela signifie simplement accepter la valeur par défaut dans la boîte de dialogue "New Project Platform". Vous voudrez probablement aussi modifier la plate-forme de solution active : pour qu'elle contienne également une cible "Any CPU".

Reconstruction/exécution.

0voto

user3234782 Points 11

Dans mon cas, il a été utile d'installer "Visual C++ Redistributable for Visual Studio 2012" bien que je travaille avec Visual Studio 2010 avec le "Visual C++ Redistributable for Visual Studio 2010" correspondant installé. Ce qui fonctionne bien tant que mkl_custom.dll n'est pas nécessaire. Mais mes collègues n'ont pas ce problème sans avoir le Redistribuable 2012 installé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X