Ich kann nicht Intel MKL, wie es von C. sollte arbeiten ich habe folgendes Testprogramm:MKL BLAS-Funktionen nicht wie erwartet verhalten
#include "stdafx.h"
#include"mkl.h"
int main()
{
int one = 1;
int ten = 10;
double copy[10];
double threes[10];
for (int i = 0; i < 10; ++i) threes[i] = 3;
dcopy(&ten, threes, &one, copy, &one);
double l1norm;
l1norm = dasum(&ten, threes, &one);
return 0;
}
die bauen und die Verknüpfung in Ordnung, aber nicht tun, was Ich hatte vor. Speziell an der Return-Zeile ist das Array "copy" weiterhin voll von dem, was bei der Deklaration vorhanden war und l1norm gleich 0. Ich verlinke zu den Bibliotheken: mkl_blas95_ilp64.lib, mkl_core_dll.lib, mkl_intel_ilp64_dll.lib und mkl_intel_thread_dll. lib.
Ich bekomme auch ähnliche Probleme beim Ausführen von Drittanbieter-Code, der MKL aufruft, so nehme ich an, das Problem ist, wie ich den Build konfiguriert habe (in Visual Studio 2015).
Das entsprechende Fortran-Programm läuft einwandfrei.
Haben Sie cblas API zu verwenden versucht anstatt Fortan API in Ihrem C-Code? – kangshiyin
@Eric Ich habe jetzt. Wenn ich die Zeile "dcopy ..." durch 'cblas_dcopy (10, drei, copy1)' 'ersetze, dann wirft die Zeile' Access violation reading location 0xFFFFFFFFFFFFFFFF' nach dem Kopieren der ersten 3. Auch der Code, den ich aufrufen muss (SuperLU) verwendet die Fortran Deklarationen mit "extern" 'cblas_dasum' scheint tatsächlich gut zu funktionieren – MatthewJohnHeath