2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Использовать lapack в C#
Сообщение04.12.2022, 18:43 


31/08/22
181
Всем доброго здоровья и хорошего настроения.
Пытаюсь использовать lapack собранный в смежной ветке в C#
Нашел несколько примеров в инете, один из них подправил под C#

(Оффтоп)

Код:
[DllImport(@"liblapack.dll"/*, EntryPoint = "dgetrf"*/, CallingConvention = CallingConvention.Cdecl)]
static extern void dgetrf(ref int m, ref int n, double[,] A, ref int lda, int[] ipiv, ref int info);

[DllImport(@"liblapack.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void LAPACK_dgetrs(ref char trans, ref int n, ref int nrhs, double[,] a, ref int lda, int[] ipiv, double[] b, ref int ldb, ref int info);
...
static void Test1()
{
            // note, to understand this part take a look in the MAN pages, at section of parameters.
            char TRANS = 'N';
            int INFO = 3;
            int LDA = 3;
            int LDB = 3;
            int N = 3;
            int NRHS = 1;
            int[] IPIV = new int[3];

            double[,] A = new double[,]
            {
                { 1, 2, 3 },
                { 2, 3, 4 },
                { 3, 4, 1 }
            };

            double[] B = new double[]
            {
                -4,
                -1,
                -2
            };
            // end of declarations

            Console.WriteLine("compute the LU factorization...");
            //void LAPACK_dgetrf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, lapack_int* ipiv, lapack_int *info );
            dgetrf(ref N, ref N, A, ref LDA, IPIV, ref INFO);

            // checks INFO, if INFO != 0 something goes wrong, for more information see the MAN page of dgetrf.
            if (INFO != 0)
            {
                Console.WriteLine("an error occured : {0}", INFO);
            }
            else
            {
                Console.WriteLine("solving the system...");
                // void LAPACK_dgetrs( char* trans, lapack_int* n, lapack_int* nrhs, const double* a, lapack_int* lda, const lapack_int* ipiv,double* b, lapack_int* ldb, lapack_int *info );
                LAPACK_dgetrs(ref TRANS, ref N, ref NRHS, A, ref LDA, IPIV, B, ref LDB, ref INFO);
                if (INFO != 0)
                {
                    Console.WriteLine("an error occured : {0}", INFO);
                    // checks INFO, if INFO != 0 something goes wrong, for more information see the MAN page of dgetrs.
                }
                else
                {
                    Console.WriteLine("print the result : {");
                    int i;
                    for (i = 0; i < N; i++)
                    {
                        Console.Write(B[i] + " ");
                    }
                    Console.WriteLine("}");
                }
            }

            Console.WriteLine("program terminated.");
}


Что бы я не делал, выдает ошибку:
Код:
System.BadImageFormatException
  HResult=0x8007000B
  Сообщение = Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)
  Источник = TensorDecompositionSolver
  Трассировка стека:
   at TensorDecompositionSolver.Program.dgetrf(Int32& m, Int32& n, Double[,] A, Int32& lda, Int32[] ipiv, Int32& info)
   at TensorDecompositionSolver.Program.Test1() in E:\ProgLab\TensorDecompositionSolver\Program.cs:line 66
   at TensorDecompositionSolver.Program.Main(String[] args) in E:\ProgLab\TensorDecompositionSolver\Program.cs:line 30

Определение функций я уже как только не писал...

Хорошо в C# не работает, попробовал в C++.
Прописал пути к liblapack.dll, libblas.dll соответствующие хедеры, пробовал и *.a в качестве *.lib...
Теперь выдает тысячу ошибок "требуется круглая скобка ")"" и указывает на места типа таких
Код:
typedef lapack_logical (*LAPACK_C_SELECT1) ( const lapack_complex_float* );

Выделяет * в конце.

Исследовал Dependency Walker'ом собранные dll. Lapack ожидаемо ссылается на blas. Кроме того есть ссылки на системные либы и на кучу таких, часть удалил

(Оффтоп)

Код:
API-MS-WIN-CORE-APIQUERY-L1-1-0.DLL
API-MS-WIN-CORE-APIQUERY-L1-1-1.DLL
API-MS-WIN-CORE-APPCOMPAT-L1-1-0.DLL
API-MS-WIN-CORE-APPCOMPAT-L1-1-1.DLL
API-MS-WIN-CORE-COMM-L1-1-0.DLL
API-MS-WIN-CORE-CONSOLE-L1-1-0.DLL
API-MS-WIN-CORE-CONSOLE-L1-2-0.DLL
API-MS-WIN-CORE-CONSOLE-L1-2-1.DLL
API-MS-WIN-CORE-CONSOLE-L2-1-0.DLL
API-MS-WIN-CORE-CONSOLE-L2-2-0.DLL
API-MS-WIN-CORE-CONSOLE-L3-2-0.DLL
API-MS-WIN-CORE-CRT-L1-1-0.DLL
API-MS-WIN-CORE-CRT-L2-1-0.DLL
....
EXT-MS-WIN-EDPUTIL-POLICY-L1-1-0.DLL
EXT-MS-WIN-EDPUTIL-POLICY-L1-1-1.DLL
EXT-MS-WIN-ELS-ELSCORE-L1-1-0.DLL
EXT-MS-WIN-EVENTING-RUNDOWN-L1-1-0.DLL
EXT-MS-WIN-FAMILYSAFETY-CHILDACCOUNT-L1-1-0.DLL
EXT-MS-WIN-FECLIENT-ENCRYPTEDFILE-L1-1-0.DLL
EXT-MS-WIN-FECLIENT-ENCRYPTEDFILE-L1-1-1.DLL
EXT-MS-WIN-FECLIENT-ENCRYPTEDFILE-L1-1-2.DLL
EXT-MS-WIN-FECLIENT-ENCRYPTEDFILE-L1-1-3.DLL
EXT-MS-WIN-FIREWALLAPI-WEBPROXY-L1-1-0.DLL
EXT-MS-WIN-FVEAPI-QUERY-L1-1-0.DLL
EXT-MS-WIN-GDI-CLIPPING-L1-1-0.DLL
EXT-MS-WIN-GDI-DC-CREATE-L1-1-0.DLL
EXT-MS-WIN-GDI-DC-L1-2-0.DLL
EXT-MS-WIN-GDI-DC-L1-2-1.DLL
EXT-MS-WIN-GDI-DEVCAPS-L1-1-0.DLL
EXT-MS-WIN-GDI-DRAW-L1-1-0.DLL
EXT-MS-WIN-GDI-DRAW-L1-1-1.DLL
EXT-MS-WIN-GDI-DRAW-L1-1-2.DLL
EXT-MS-WIN-GDI-DRAW-L1-1-3.DLL
EXT-MS-WIN-GDI-FONT-L1-1-0.DLL
EXT-MS-WIN-GDI-FONT-L1-1-1.DLL
EXT-MS-WIN-GDI-FONT-L1-1-2.DLL
EXT-MS-WIN-GDI-FONT-L1-1-3.DLL
EXT-MS-WIN-GDI-GDIPLUS-L1-1-0.DLL
EXT-MS-WIN-GDI-INTERNAL-DESKTOP-L1-1-0.DLL
EXT-MS-WIN-GDI-INTERNAL-DESKTOP-L1-1-1.DLL
EXT-MS-WIN-GDI-INTERNAL-DESKTOP-L1-1-2.DLL
EXT-MS-WIN-GDI-INTERNAL-DESKTOP-L1-1-3.DLL
EXT-MS-WIN-GDI-INTERNAL-DESKTOP-L1-1-4.DLL
EXT-MS-WIN-GDI-METAFILE-L1-1-0.DLL
EXT-MS-WIN-GDI-METAFILE-L1-1-1.DLL
EXT-MS-WIN-GDI-METAFILE-L1-1-2.DLL
EXT-MS-WIN-GDI-PATH-L1-1-0.DLL
EXT-MS-WIN-GDI-PRINT-L1-1-0.DLL
EXT-MS-WIN-GDI-PRIVATE-L1-1-0.DLL
EXT-MS-WIN-GDI-RENDER-L1-1-0.DLL
EXT-MS-WIN-GDI-WCS-L1-1-0.DLL
EXT-MS-WIN-GPAPI-GROUPPOLICY-L1-1-0.DLL
EXT-MS-WIN-GUI-DUI70-L1-1-0.DLL
EXT-MS-WIN-IMM-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-APPCOMPAT-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-DATETIME-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-ERRORHANDLING-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-FILE-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-LOCALIZATION-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-PACKAGE-CURRENT-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-PACKAGE-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-PACKAGE-L1-1-2.DLL
EXT-MS-WIN-KERNEL32-QUIRKS-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-QUIRKS-L1-1-1.DLL
EXT-MS-WIN-KERNEL32-REGISTRY-L1-1-0.DLL
EXT-MS-WIN-KERNEL32-SIDEBYSIDE-L1-1-0.DLL
EXT-MS-WIN-KERNELBASE-PROCESSTHREAD-L1-1-0.DLL
EXT-MS-WIN-KERNELBASE-PROCESSTHREAD-L1-1-1.DLL
EXT-MS-WIN-MININPUT-INPUTHOST-L1-1-0.DLL
EXT-MS-WIN-MPR-MULTIPLEPROVIDERROUTER-L1-1-0.DLL
EXT-MS-WIN-MRMCORER-RESMANAGER-L1-1-0.DLL
EXT-MS-WIN-NETWORKING-WCMAPI-L1-1-0.DLL
EXT-MS-WIN-NETWORKING-WLANAPI-L1-1-0.DLL
EXT-MS-WIN-NETWORKING-WLANSTORAGE-L1-1-0.DLL
EXT-MS-WIN-NTDSAPI-ACTIVEDIRECTORYCLIENT-L1-1-0.DLL
EXT-MS-WIN-NTDSAPI-ACTIVEDIRECTORYCLIENT-L1-1-1.DLL
EXT-MS-WIN-NTUSER-DC-ACCESS-EXT-L1-1-0.DLL
EXT-MS-WIN-NTUSER-DIALOGBOX-L1-1-0.DLL
EXT-MS-WIN-NTUSER-DRAW-L1-1-0.DLL
EXT-MS-WIN-NTUSER-DRAW-L1-1-1.DLL
EXT-MS-WIN-NTUSER-DRAW-L1-1-2.DLL
EXT-MS-WIN-NTUSER-GUI-L1-1-0.DLL
EXT-MS-WIN-NTUSER-KEYBOARD-L1-1-0.DLL
EXT-MS-WIN-NTUSER-MENU-L1-1-2.DLL
EXT-MS-WIN-NTUSER-MESSAGE-L1-1-0.DLL
EXT-MS-WIN-NTUSER-MESSAGE-L1-1-1.DLL
EXT-MS-WIN-NTUSER-MESSAGE-L1-1-2.DLL
EXT-MS-WIN-NTUSER-MISC-L1-1-0.DLL
EXT-MS-WIN-NTUSER-MISC-L1-2-0.DLL
EXT-MS-WIN-NTUSER-MISC-L1-5-0.DLL
EXT-MS-WIN-NTUSER-MISC-L1-5-1.DLL
EXT-MS-WIN-NTUSER-MOUSE-L1-1-0.DLL
EXT-MS-WIN-NTUSER-PRIVATE-L1-1-0.DLL
EXT-MS-WIN-NTUSER-PRIVATE-L1-1-1.DLL
EXT-MS-WIN-NTUSER-PRIVATE-L1-2-0.DLL
EXT-MS-WIN-NTUSER-PRIVATE-L1-3-1.DLL
EXT-MS-WIN-NTUSER-PRIVATE-L1-3-2.DLL
EXT-MS-WIN-NTUSER-PRIVATE-L1-3-3.DLL
EXT-MS-WIN-NTUSER-RECTANGLE-EXT-L1-1-0.DLL
EXT-MS-WIN-NTUSER-ROTATIONMANAGER-L1-1-0.DLL
EXT-MS-WIN-NTUSER-SERVER-L1-1-0.DLL
EXT-MS-WIN-NTUSER-STRING-L1-1-0.DLL
EXT-MS-WIN-NTUSER-SYNCH-L1-1-0.DLL
EXT-MS-WIN-NTUSER-UICONTEXT-EXT-L1-1-0.DLL
EXT-MS-WIN-NTUSER-WINDOW-L1-1-0.DLL
EXT-MS-WIN-NTUSER-WINDOW-L1-1-1.DLL
EXT-MS-WIN-NTUSER-WINDOW-L1-1-2.DLL
EXT-MS-WIN-NTUSER-WINDOW-L1-1-3.DLL
EXT-MS-WIN-NTUSER-WINDOWCLASS-L1-1-0.DLL
EXT-MS-WIN-NTUSER-WINDOWSTATION-L1-1-0.DLL
EXT-MS-WIN-ODBC-ODBC32-L1-1-0.DLL
EXT-MS-WIN-OLE32-BINDCTX-L1-1-0.DLL
EXT-MS-WIN-OLE32-IE-EXT-L1-1-0.DLL
EXT-MS-WIN-OLE32-OLEAUTOMATION-L1-1-0.DLL
EXT-MS-WIN-OLEACC-L1-1-1.DLL
EXT-MS-WIN-OOBE-QUERY-L1-1-0.DLL
EXT-MS-WIN-PRINTER-PRNTVPT-L1-1-0.DLL
EXT-MS-WIN-PRINTER-PRNTVPT-L1-1-2.DLL
EXT-MS-WIN-PRINTER-WINSPOOL-CORE-L1-1-0.DLL
EXT-MS-WIN-PROFILE-EXTENDER-L1-1-0.DLL
EXT-MS-WIN-PROFILE-USERENV-L1-1-0.DLL
EXT-MS-WIN-PROFILE-USERENV-L1-1-1.DLL
EXT-MS-WIN-RAS-RASAPI32-L1-1-0.DLL
EXT-MS-WIN-RAS-TAPI32-L1-1-1.DLL
EXT-MS-WIN-RDR-DAVHLPR-L1-1-0.DLL
EXT-MS-WIN-REINFO-QUERY-L1-1-0.DLL
EXT-MS-WIN-RESOURCEMANAGER-CRM-L1-2-0.DLL
EXT-MS-WIN-RESOURCES-DEPLOYMENT-L1-1-0.DLL
EXT-MS-WIN-RESOURCES-LANGUAGEOVERLAY-L1-1-0.DLL
EXT-MS-WIN-RESOURCES-LANGUAGEOVERLAY-L1-1-1.DLL
EXT-MS-WIN-RO-TYPERESOLUTION-L1-1-0.DLL
EXT-MS-WIN-RPC-SSL-L1-1-0.DLL
EXT-MS-WIN-RTCORE-GDI-DEVCAPS-L1-1-0.DLL
EXT-MS-WIN-RTCORE-GDI-OBJECT-L1-1-0.DLL
EXT-MS-WIN-RTCORE-GDI-RGN-L1-1-0.DLL
EXT-MS-WIN-RTCORE-GDI-RGN-L1-1-1.DLL
EXT-MS-WIN-RTCORE-MINUSER-INPUT-L1-1-1.DLL
EXT-MS-WIN-RTCORE-MINUSER-INTERNAL-L1-1-0.DLL
EXT-MS-WIN-RTCORE-MINUSER-PRIVATE-EXT-L1-1-0.DLL
EXT-MS-WIN-RTCORE-MINUSER-PRIVATE-EXT-L1-1-1.DLL
EXT-MS-WIN-RTCORE-NTUSER-CURSOR-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-DC-ACCESS-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-DPI-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-DPI-L1-2-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-DPI-L1-2-1.DLL
EXT-MS-WIN-RTCORE-NTUSER-IAM-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-INTEGRATION-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-RAWINPUT-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-SYNCH-EXT-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-SYSCOLORS-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-SYSPARAMS-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-WINDOW-EXT-L1-1-0.DLL
EXT-MS-WIN-RTCORE-NTUSER-WINDOW-EXT-L1-1-1.DLL
....
EXT-MS-WIN-WINRT-STORAGE-L1-1-0.DLL
EXT-MS-WIN-WLAN-ONEXUI-L1-1-0.DLL
EXT-MS-WIN-WLAN-SCARD-L1-1-0.DLL
EXT-MS-WIN-WPC-WEBFILTER-L1-1-0.DLL
EXT-MS-WIN-WWAN-WWAPI-L1-1-0.DLL
EXT-MS-WIN-WWAN-WWAPI-L1-1-1.DLL
EXT-MS-WIN32-SUBSYSTEM-QUERY-L1-1-0.DLL
EXT-MS-WINDOWSCORE-DEVICEINFO-L1-1-0.DLL
HVSIFILETRUST.DLL
IESHIMS.DLL
PDMUTILITIES.DLL
LIBGFORTRAN-5.DLL
IEFRAME.DLL
SHCORE.DLL
SHLWAPI.DLL
ADVAPI32.DLL
KERNEL32.DLL
KERNELBASE.DLL
LIBBLAS.DLL
LIBGCC_S_SEH-1.DLL
LIBLAPACK.DLL
MSVCRT.DLL
NTDLL.DLL
RPCRT4.DLL
SECHOST.DLL
ACLUI.DLL
ACTIVEDS.DLL
ADSLDPC.DLL
ADVPACK.DLL
AEPIC.DLL
APPHELP.DLL
AUDIOSES.DLL
AUTHZ.DLL
AVRT.DLL
BCD.DLL
BCP47LANGS.DLL
BCP47MRM.DLL
BCRYPT.DLL
BCRYPTPRIMITIVES.DLL
BROWCLI.DLL
CABINET.DLL
CERTCA.DLL
CERTENROLL.DLL
CFGMGR32.DLL
CHAKRA.DLL
CHARTV.DLL
CLDAPI.DLL
COMBASE.DLL
COMCTL32.DLL
COMCTL32.DLL
COMDLG32.DLL
COML2.DLL
COMPPKGSUP.DLL
CONTACTACTIVATION.DLL
COREMESSAGING.DLL
COREUICOMPONENTS.DLL
CREDUI.DLL
CRYPT32.DLL
CRYPTBASE.DLL
CRYPTNET.DLL
CRYPTNGC.DLL
CRYPTSP.DLL
CRYPTTPMEKSVC.DLL
CRYPTUI.DLL
CRYPTXML.DLL
CSCAPI.DLL
D2D1.DLL
D3D11.DLL
D3D11ON12.DLL
D3D12.DLL
D3DSCACHE.DLL
DAVHLPR.DLL
DBGCORE.DLL
DBGENG.DLL
DBGHELP.DLL
DBGMODEL.DLL
DCOMP.DLL
DECLAREDCONFIGURATION.DLL
DEVMGR.DLL
DEVOBJ.DLL
DEVRTL.DLL
DFSCLI.DLL
DHCPCSVC.DLL
DHCPCSVC6.DLL
DMCMNUTILS.DLL
DMENTERPRISEDIAGNOSTICS.DLL
DMPUSHPROXY.DLL
DNSAPI.DLL
DPAPI.DLL
DRVSETUP.DLL
DRVSTORE.DLL
DSCLIENT.DLL
DSPARSE.DLL
DSREG.DLL
DSROLE.DLL
DUI70.DLL
DUSER.DLL
DWMAPI.DLL
DWRITE.DLL
DXGI.DLL
DXILCONV.DLL
EAPPCFG.DLL
EAPPPRXY.DLL
EDGEISO.DLL
EDPAUDITAPI.DLL
EDPUTIL.DLL
EFSADU.DLL
EFSCORE.DLL
EFSUTIL.DLL
EFSWRT.DLL
ELSCORE.DLL
ESENT.DLL
FECLIENT.DLL
FIREWALLAPI.DLL
FLTLIB.DLL
FMS.DLL
FVEAPI.DLL
FVECERTS.DLL
FVESKYBACKUP.DLL
FWBASE.DLL
FWPOLICYIOMGR.DLL
GDI32.DLL
GDIPLUS.DLL
HID.DLL
HTTPAPI.DLL
ICU.DLL
ICUIN.DLL
ICUUC.DLL
IEADVPACK.DLL
IEAPFLTR.DLL
IERTUTIL.DLL
IEUI.DLL
IMAGEHLP.DLL
IMGUTIL.DLL
IMM32.DLL
INETCOMM.DLL
IPHLPAPI.DLL
IRI.DLL
LINKINFO.DLL
LOGONCLI.DLL
MDMREGISTRATION.DLL
MFC42U.DLL
MI.DLL
MIUTILS.DLL
MLANG.DLL
MMDEVAPI.DLL
MPR.DLL
MPRMSG.DLL
MRMCORER.DLL
MSASN1.DLL
MSCTF.DLL
MSFEEDS.DLL
MSHTML.DLL
MSI.DLL
MSILTCFG.DLL
MSIMG32.DLL
MSISO.DLL
MSLS31.DLL
MSOERT2.DLL
MSVCP110_WIN.DLL
MSVCP_WIN.DLL
NCRYPT.DLL
NETAPI32.DLL
NETUTILS.DLL
NEWDEV.DLL
NGCRECOVERY.DLL
NSI.DLL
NTASN1.DLL
NTDSAPI.DLL
NTSHRUI.DLL
OCCACHE.DLL
OLE32.DLL
OLEACC.DLL
OLEAUT32.DLL
OLEDLG.DLL
OMADMAPI.DLL
ONEX.DLL
POLICYMANAGER.DLL
POWRPROF.DLL
PRINT.PRINTSUPPORT.SOURCE.DLL
PRINTUI.DLL
PROFAPI.DLL
PROPSYS.DLL
PUIAPI.DLL
RASAPI32.DLL
RASMAN.DLL
REGAPI.DLL
RMCLIENT.DLL
RTUTILS.DLL
SAMCLI.DLL
SAMLIB.DLL
SCECLI.DLL
SECUR32.DLL
SETUPAPI.DLL
SHDOCVW.DLL
SHELL32.DLL
SLC.DLL
SPFILEQ.DLL
SPINF.DLL
SPPC.DLL
SRPAPI.DLL
SRVCLI.DLL
SSPICLI.DLL
TBS.DLL
TEXTINPUTFRAMEWORK.DLL
TEXTSHAPING.DLL
TOKENBINDING.DLL
TPMCOREPROVISIONING.DLL
TWINAPI.APPCORE.DLL
TWINAPI.DLL
UIAUTOMATIONCORE.DLL
UMPDC.DLL
URLMON.DLL
USER32.DLL
USERDATATYPEHELPERUTIL.DLL
USERENV.DLL
UXTHEME.DLL
VAULTCLI.DLL
VERSION.DLL
VIRTDISK.DLL
W32TOPL.DLL
WEBAUTHN.DLL
WEBIO.DLL
WEBSERVICES.DLL
WEBSOCKET.DLL
WER.DLL
WEVTAPI.DLL
WFDSCONMGR.DLL
WIN32U.DLL
WINBRAND.DLL
WINDOWSCODECS.DLL
WINDOWSPERFORMANCERECORDERCONTROL.DLL
WINHTTP.DLL
WININET.DLL
WINIPCFILE.DLL
WINMM.DLL
WINMMBASE.DLL
WINMSIPC.DLL
WINNSI.DLL
WINSPOOL.DRV
WINSTA.DLL
WINTRUST.DLL
WKSCLI.DLL
WLANAPI.DLL
WLDAP32.DLL
WLDP.DLL
WMICLNT.DLL
WPAXHOLDER.DLL
WS2_32.DLL
WTSAPI32.DLL
WUCEFFECTS.DLL
XMLLITE.DLL

Эта куча ссылок, это нормально?
В чем может быть проблема?
Помогите пожалуйста создать любой рабочий пример использующий lapack желательно под C#. С++ тоже пойдет на худой конец, пока что не работает вообще никак.

Все файлы собранные в смежной ветке

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение05.12.2022, 07:56 


12/07/21
108
https://www.codeproject.com/Tips/709270 ... C-Librarie

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение05.12.2022, 13:46 


31/08/22
181
traffic_lights благодарю за ссылку, прочитал обе части статьи, они не по теме. Я спрашивал как конкретно lapack заюзать, можно и mkl раз вы говорите функции одинаковые.
Что такое DllImport в C# я знаю, собственно в примере выше им и пользовался, так же пробовал указывать прямо EntryPoint, по разному пробовал писать сигнатуру функций, знаю что в lapack все передается по указателю, даже переменные...
Следующий простой пример работает на ура
Код:
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
 
static void Main()
{
    MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}


Уверен, если я свою собственную dll со своей функцией сделаю она так же хорошо отработает.

А вот lapack работать отказывается, то ли сама либа какая то кривая... почему в ней столько ссылок каких то левых библиотек напичкано... то ли у меня руки кривые, то ли что то еще...

ПС: Было проще освоить CNTK с TensorFlow чем запустить 2 функции из lapack'а... :D

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение05.12.2022, 21:07 


27/08/14
206
Проверьте, что в настройках проекта C# случайно не стоит собирать x86, а то старые версии VS любили по дефолту так выставлять.

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение06.12.2022, 08:56 


31/08/22
181
Progger, да, на стек оверфлов кажется, находил рекомендации поменять архитектуру, пробовал и х86 и х64 не помогает.
Следующее пишу по памяти, вечером перепроверю:
Но ошибка меняется. На х64 он в принципе не может найти модуль, а на х86 ошибка что у меня в посте, "Была сделана попытка загрузить программу, имеющую неверный формат.".

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение07.12.2022, 22:12 


31/08/22
181
Schrodinger's cat в сообщении #1572765 писал(а):
Следующее пишу по памяти, вечером перепроверю:
Но ошибка меняется. На х64 он в принципе не может найти модуль, а на х86 ошибка что у меня в посте, "Была сделана попытка загрузить программу, имеющую неверный формат.".

Проверил, да все так.

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение19.12.2022, 22:27 


11/08/18
363
Если говорить только о С++ в вижуалстудии, то самым простым способом будет подцепить Intel Math Kernel Library, там внутри весь лапак и бласы есть. Если совсем религия не позволяет, то цепляйте AOCL от АМДшника - там тоже и лапак и бласы имеются :) Мне когда-то какой-то местный сисадмин так за десять минут все настроил и я потом весть свой софт на вижуал студию прикомпилил. А из шарпа они потом цельные мои модули вызывали. Детали как конкретно - не знаю, я реально в винде полный ноль. По скорости АМДшная и Интеловская библиотеки одинаково хорошо на всех платформах оптимизированы, и разница по скорости реально проценты то в одну, то в другую сторону. И то, и другое, вроде бесплатное.

(Оффтоп)

По Вашему вопросу по тензорным разложениям в другой теме - отвечу на днях, простите, пожалуйста, за задержку!

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение20.12.2022, 09:40 


31/08/22
181
Простите за может тупой вопрос но Intel Math Kernel Library его где брать? Просто тут уже рекламировали Intel OneAPI, я его поставил но как использовать не допер, а человек рекламировавший это молчит :D, так же поиск выдает какие то NuGet пакеты (в С++ есть NuGet? я в этом отстал от жизни), еще можно встретить непонятные сборки и mkl и типа Armadillo...
Откуда качать нативный MKL?

AOCL надо полагать тут:
https://developer.amd.com/amd-aocl/#downloads

ilghiz в сообщении #1574459 писал(а):
С++ в вижуалстудии

Преимущественно им и пользовался когда то давно. Настолько давно, что уже успели несколько стандартов плюсов выпустить. А C# расслабляет в этом плане, кнопочку нажал в NuGet и нужна либа уже в проекте.

Как вызвать из C# это уже вопрос второй, с этим разберусь.
Для вызова простых функций уже много раз использовал DllImport для системных dll.
Есть еще 2 способа, через CLR и COM но про них только читал, использовать не приходилось.

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение20.12.2022, 10:24 


11/08/18
363
Так это, с сайта интела разве не дают? Intel® oneAPI Math Kernel Library, у меня ссылка на закачку открывается с https://www.intel.com/content/www/us/en ... ons=online
Там единственно - логин должен быть у интела и сейчас могут быть проблемы, если указать свое местонахождение в РФ.

У АМДшника в общем все также.

То есть ИМХО, качать то, что дадут, они мало друг от друга отличаются, а лапак у них одинаковый.

-- 20.12.2022, 09:32 --

Schrodinger's cat в сообщении #1574470 писал(а):
Для вызова простых функций уже много раз использовал DllImport для системных dll.

я очень не специалист с шарпе и в студии, но несколько лет назад видел, как довольно хорошо в шарпах разбирающийся человек пытался прикрутить из лапака сингулярное разложение, и у него очень долго ничего не получалось. Все закончилось тем, что он написал С++ функцию, которая это сингулярное разложение вызывало, и уже с этой функцией как-то с шарпами коммуницировался.

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение22.12.2022, 15:53 


31/08/22
181
В общем нашел, установил, теперь это запихали в OneAPI. Какие то библиотеки установились. Да, теперь без VPN никак.
У АМД попроще, только либы и ничего лишнего.

Спасибо. Буду пробовать.

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение25.12.2022, 20:10 


31/08/22
181
Получилось использовать mkl в проекте с++, скалярное произведение cblas_ddot отрабатывает верно. Фактически это мой первый опыт работы напрямую с mkl. Урааа, работает.

А вот AMD AOCL выдает необработанное исключение, асмовый код указывает на вызов инструкции vmovaps в функции cblas_dgemm, насколько я понимаю это инструкция AVX, а у меня нет AVX. Но код компилируется и запускается.
Версию без AVX не нашел.

Всем спасибо за помощь.

Может кто порекомендовать вменяемый путеводитель по функциям данных либ?
Нативные гайды я конечно смотрел, и примеры но они как то не составили общего представления.

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение26.12.2022, 00:34 


11/08/18
363
Странно, что с амдшной либой так получилось - у меня недавно свежая их либа встала на линуксе под старым (десятилетнем) интеловском лаптопе - вроде же AVX с сандибриджа, что в 2011 году вышел, поддерживается.

По лапаку - лучше оригиналы:
https://netlib.org/lapack/lug/node25.html
и все в общем
https://netlib.org/lapack/lug/lapack_lug.html
не пугаться, что там 1999 (он еще даже в 1990 был таким же), с того момента интерфейс практически не менялся, правда плавно переехал с Фортрана на С, а вот внутренность очень сильно пооптимизировалась.

По Фурье - любой юзермануал из FFTW, по остальному - только свои родные мануалы, хотя всего остального там реально кот наплакал.

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение26.12.2022, 21:35 


31/08/22
181
ilghiz пойдет, спасибо.

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение27.12.2022, 02:03 


12/07/21
108
ilghiz
ilghiz в сообщении #1575064 писал(а):
плавно переехал с Фортрана на С

Не соответствует действительности. Хотя некоторое действительно реализовано только на C (этого нет в LAPACK): например, post1571898.html#p1571898

 Профиль  
                  
 
 Re: Использовать lapack в C#
Сообщение27.12.2022, 04:27 


11/08/18
363
traffic_lights в сообщении #1575168 писал(а):
ilghiz
ilghiz в сообщении #1575064 писал(а):
плавно переехал с Фортрана на С

Не соответствует действительности. Хотя некоторое действительно реализовано только на C (этого нет в LAPACK): например, post1571898.html#p1571898

Из контекста вырванная фраза - я имел ввиду интерфейс. И он - то есть интерфейс, и в MKL, и в AOCL сейчас уже поддерживается в синтаксисе С (на С-шные инклюды взгляните), хотя конечно для любителей его можно и в фортраносвской нотации дергать.

Да и бласы уже никто на фортране не оптимизирует, сорсы ATLAS вам в руки - там на фортране - только заглушки, чтобы атлас из фортрана вызывать.

А вот сингулярное - да, как было на фортране, так и осталось, и ничего не поделать. Мне кстати реально не понятно, почему, имея еще с 99 года поддержку многомерных массивов в С (С99 стандарт), народ до сих пор полностью не отказался от фортрана, так как фортран отличался от остальных языков только этим фактом - получил память в подпрограмму и замаппил ее в двухмерный массив с ведущей размерностью из аргументов этой функции. Раньше (до С99) такое делать нельзя было, с С99 - это тоже можно сделать в С, и писать на фортране сейчас реально моветон из-за его ограничений по указателям и способам аллокации памяти.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group