Looks like a function is missing

Looks like a function is missing

Dmitry N.'s picture

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/ ?

7 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.
Sergey Kostrov's picture

>>...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.

Dmitry N.'s picture

Добрый день)

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

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

Tim Prince's picture

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.

Sergey Kostrov's picture

Dmitry suggested to use dgemm function instead of dgemv function.

Dmitry, Would you be able to post a complete test case for investigation?

TODD R. (Intel)'s picture

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.

Victor Pasko (Intel)'s picture

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?

 

Thanks, -- Victor

Login to leave a comment.