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

Using cblas_sgemm causes program to crash

Nongshim12
Beginner
1,836 Views

When the program reaches the point where it uses cblas_sgemm when called, it appears to exit with a code 20 , otherwise does not show an error message when it comes. Any idea what is causing this?

0 Kudos
19 Replies
MRajesh_intel
Moderator
1,795 Views

Hi, 


Could you please share a minimal reproducer along with OS, Compiler and MKL version information with us?


Regards

Rajesh.





0 Kudos
Nongshim12
Beginner
1,788 Views

Currently using windows 10, Intel C++ 2021 compiler, and MKL 2021.1.1

Here is a sample of the code

 

 

 

float scale(float sx, float sy, float sz)
{
	float x1[4*4], x2[4*4], x3[4*4];
        float alpha = 1.0;
	float beta = 0.0;
	int b = 0;

	for (int j = 0; j < 4; j++) {
		for (int i = 0; i < 4; i++) {
			if (i == j) {
				if (i == 0) {
					x2[b] = sx;
					x1[b] = 1;
				}
				else if (i == 1) {
					x2[b] = sy;
					x1[b] = 1;
				}
				else if (i == 2) {
					x2[b] = sz;
					x1[b] = 1;
				}
				else if (i == 3) {
					x2[b] = 1;
					x1[b] = 1;
				}

			}
			else {
				x2[b] = 0;
				x1[b] = 0;
			}
			b++;
		}
	}
	cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 4, 4, 4, alpha, x1, 4, x2, 4, beta, x3, 4);
	return x3;
}


​
0 Kudos
MRajesh_intel
Moderator
1,763 Views

Hi,


I tried running the program using cmd, it worked for me. Can you please try compiling it on cmd and let me know if you are facing any issues?


Regards

Rajesh.


0 Kudos
Nongshim12
Beginner
1,761 Views

Hi,

Sorry one thing i forgot to mention, i am using visual studio 2019 to run and compile (switched project to use intel compiler as well). I am not well versed in knowing how to compile using cmd for it since I do not usually use this as i am pretty new to using c++ and intel compilers/libraries.

0 Kudos
mecej4
Honored Contributor III
1,754 Views

Your function is declared as returning a scalar float, but you are attempting to return a pointer to an array of float. Secondly, x3 is a local variable, which goes out of scope when the function returns.

Here is a suggestion to get things working. Instead of calling cblas_sgemm, write code to calculate x3 (simply setting all 16 elements to 0.0 will do). After you get the function to work, replace that code with the call to cblas_gemm.

0 Kudos
Nongshim12
Beginner
1,746 Views

In my current code which i have tried to continue to figure out, i do have all 16 values within x3 set to 0.0f, however it is still doing the same thing of exiting at the cblas_sgemm call at the end as it does not print anything after that when i put a print call after it but does right before the call.

0 Kudos
mecej4
Honored Contributor III
1,740 Views

You did not respond to the remarks in the first paragraph of my post. Your code is wrong.

The return type of the argument does not match the type in the function declaration. In fact, the GCC compiler says the same thing when run on your code:

broken.c:37:8: error: incompatible types when returning type 'float *' but 'float' was expected
   37 | return x3;
      |        ^~

My other comment, regarding returning a local pointer to a caller, is also important. 

0 Kudos
Nongshim12
Beginner
1,737 Views

Well yes, i have fixed that as well but forgot to mention it. But my main focus right now is why it is stopping at the cblas_sgemm call right now as everything else works  but that call.

0 Kudos
MRajesh_intel
Moderator
1,711 Views

Hi,

 

Please follow the procedure below and let us know if you face any issues:

1) Open ""oneAPI command prompt for Visual Studio" to automatically source oneAPI environment or execute the setvars.bat file in oneAPI installation path(In General Command Prompt) to manually source the oneAPI environment.

2) Compile /Run the program using the command:

icl /Qmkl example.cpp && example.exe

 

Here is your working sample code:

#include<stdio.h>
#include<mkl.h>



float* scale(float sx, float sy, float sz)
{
	float x1[4 * 4], x2[4 * 4], x3[4 * 4];
	float alpha = 1.0;
	float beta = 0.0;
	int b = 0;

	for (int j = 0; j < 4; j++) {
		for (int i = 0; i < 4; i++) {
			if (i == j) {
				if (i == 0) {
					x2[b] = sx;
					x1[b] = 1;
				}
				else if (i == 1) {
					x2[b] = sy;
					x1[b] = 1;
				}
				else if (i == 2) {
					x2[b] = sz;
					x1[b] = 1;
				}
				else if (i == 3) {
					x2[b] = 1;
					x1[b] = 1;
				}

			}
			else {
				x2[b] = 0;
				x1[b] = 0;
			}
			b++;
		}
	}
	cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 4, 4, 4, alpha, x1, 4, x2, 4, beta, x3, 4);
	return x3;
}
int main()
{
	float* p;
	p = scale(1.2, 2.2, 3.1);
	for (int i = 0; i < 16; i++) {
		
			printf("%f", p[i]);
		printf("\t");
		
	}



return 0;

}

 

Thanks

Rajesh.

 

0 Kudos
Nongshim12
Beginner
1,703 Views

Hi Rajesh,

Thank you, i have been able to get my sample code working now, however when i tried to implement this code to something similar to a current project i have been working on and it appears that any MKL calls i make just quits the cmd prompt that is open when i print out values such as mkl_malloc and the cblas_sgemm functions. Without those calls, everything runs through, however when the mkl calls are there, it just completely closes at those function calls. Is this due to something i need to add for environments? It is a separate project folder as a dll project to the main application (however my sample code is built the same way and works).

0 Kudos
MRajesh_intel
Moderator
1,669 Views

Hi,

 

Please update the current oneAPI version to 2021.2, make sure that you either set oneMKL in sequential or parallel mode. If you use ILP64, make sure to set it to Yes and configure the debug version x64, x86 accordingly in the visual studio and let us know if you face any issues.

 

Please check the attached picture which shows the above configuration in visual studio.

 

Regards

Rajesh.

 

0 Kudos
Nongshim12
Beginner
1,659 Views

It appears that I can finally see what exception is being thrown by Visual Studio when using debugger and this is being thrown:

Exception thrown at 0x7556A8B2 (KernelBase.dll) in MakeSTL2.exe: 0xC06D007E: Module not found (parameters: 0x00F7EFBC).
Unhandled exception at 0x7556A8B2 (KernelBase.dll) in MakeSTL2.exe: 0xC06D007E: Module not found (parameters: 0x00F7EFBC).

 

I do have the MKL setting set to parallel currently in the settings so it should be using the MKL library.

0 Kudos
MRajesh_intel
Moderator
1,639 Views

Hi,


Do you see the same behavior with other MKL applications or is it specific to this application?


Please ensure you upgrade your oneAPI base toolkit to latest version(2021.2). Let us know if you face any issues.


Regards

Rajesh.


0 Kudos
Nongshim12
Beginner
1,620 Views

Hi,

Currently i am only using this application for my project. I have upgraded the base toolkit to the latest version and it still gives me the module not found during runtime.

0 Kudos
Nongshim12
Beginner
1,620 Views

It is also currently giving me a symbol file not loaded for mkl_intel_thread.1.dll during runtime and i do have the dll files located in where the output files are located (eg .exe file)

0 Kudos
MRajesh_intel
Moderator
1,604 Views

Hi,

 

1) Can you once please refer to the earlier reply, running code on cmd and check whether the same issue is present.

 

2) Follow these steps to include the missing DLL path:

  • Open the project property pages (Alt + Enter)
  • Change the Configuration to Debug (On the top left corner)
  • On the left window, under the Configuration properties tab, click on Debugging.
  • Under the Action tab, click on the Environment field and add the following:
PATH=C:\Program Files (x86)\Intel\oneAPI\mkl\latest\redist\intel64;%PATH%

 

Save the changes and run your executable. Let us know if you face any issues.

 

Regards

Rajesh.

 

0 Kudos
MRajesh_intel
Moderator
1,579 Views

Hi,


Please let us know if there is any update.


Regards

Rajesh.


0 Kudos
Nongshim12
Beginner
1,530 Views

Hi,

Yes, i was able to get it working now. Thank you for all the help and suggestions.

0 Kudos
MRajesh_intel
Moderator
1,525 Views

Hi,

 

Thanks for the confirmation!

As this issue has been resolved, we will no longer respond to this thread. If you require any additional assistance from Intel, please start a new thread. Any further interaction in this thread will be considered community only.

 

Have a Good day.

 

Regards

Rajesh

 

0 Kudos
Reply