Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

Looks like a function is missing

Dmitry_N_
Beginner
661 Views

Hello!

Any help will be highly appriciated)

Strange thing occures when i try to build a custom dll.

the make command i use looks like this: nmake ia32 buf_lib= export=func_list name=mkl_1

while func list contains only one function

DGEMM

And everything works perfect. 

Then i add one more function to func_list so it looks like this:

DGEMM
DGEMV

, make another dll:

nmake ia32 buf_lib= export=func_list name=mkl_2

Matrix-Matrix product still works

but the dgemv function seems not working

Matrix A is 10x10 matrix, containing 1 on each position.

B is a 10-dimension vector containing 1 on each position. 

C is a 10-dimention vector containing 1 on each position.

This call of dgemv

CBLAS.dgemv(CBLAS.TRANSPOSE.NoTrans, 10, 10, 25.0, A, 10, B, 10, 11.0, C, 10); (C := 25*A*B+11*C)

is successful and shows no link errors. That means that a new entry point arised.

BUT! This call should change the C vector an make 36 on each position, but it doesn't! It leaves C unchanged. 

Moreover, the strange thing i found, that the mkl_1.dll is about 995 Kb, and the mkl_2.dll is smth like 996 Kb. Is it possible that additional function dgemv adds only 1Kb to the output dll?

I also tried another styles in func_list file, like cblas_dgemm and cblas_dgemv, but it doesn't change a thing. 

looks like my blas library is not full. What can i do?

May be i should change some Object File Library files in /%MKL_ROOT%/lib/ia32/ ?

0 Kudos
6 Replies
SergeyKostrov
Valued Contributor II
661 Views
>>...I also tried another styles in func_list file, like cblas_dgemm and cblas_dgemv, but it doesn't change a thing MKL functions cblas_dgemm and cblas_dgemv are referenced in mkl_rt.lib mkl_intel_c.lib mkl_intel_c_dll.lib libraries for a 32-bit Windows platform.
0 Kudos
Dmitry_N_
Beginner
661 Views

Добрый день)

Я так понял, что можно в списке экспортируемых функций писать или cblas_dgemv или DGEMV. То есть функция та же, только "стиль" вызова другой. У меня в папке либ все указанные файлы есть. Но от этого не легче. Все равно с двумя функциями dgemm и dgemv dll-ка занимает 996 кб, то есть всего лишь на 1 кб больше, чем только с одной dgemm. 

Может быть тупо представить вектор как матрицу 1хN и вставлять в dgemm и получать результат как произведение матрицы на матрицу?

0 Kudos
TimP
Honored Contributor III
661 Views

Certainly Sergey reads Russian, and those of us who read a little can use practice, but there is a separate Russian language forum.  Here, all who read English should be permitted to get the benefit of the discussions.

By default, you would be linking against MKL dll library, so the bulk of dgemm and dgemv would not be present in your .dll.

If you use appropriate include files, the compiler will check that you have correct reference and value specifications for your MKL functions.  Without the include files, you could link without those matching.

0 Kudos
SergeyKostrov
Valued Contributor II
661 Views
Dmitry suggested to use dgemm function instead of dgemv function. Dmitry, Would you be able to post a complete test case for investigation?
0 Kudos
Todd_R_Intel
Employee
661 Views

If dgemm had a dgemv dependency (not impossible) then the difference between adding dgemv and not adding it would indeed be slight since most of it would need to be present in the DGEMM-only DLL.

A testcase would be useful.

0 Kudos
barragan_villanueva_
Valued Contributor I
661 Views

Hi,

If you want to run cblas_dgemm and cblas_dgemv MKL functions then these names are to be in your func_list.

Also please check that in your application namely cblas_dgemm and cblas_dgemv are called correctly.

However, in your example there is: CBLAS.dgemv. Is it C# testcase?

 

0 Kudos
Reply