Skip to content

Commit fefa816

Browse files
committed
Merge branch 'OpenBLAS'
Conflicts: src/Numerics/Control.cs src/Numerics/Properties/AssemblyInfo.cs src/UnitTests/UseLinearAlgebraProvider.cs
2 parents f1e46e5 + 5ba94f0 commit fefa816

22 files changed

+3336
-1168
lines changed

MathNet.Numerics.NativeProviders.sln

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CUDA", "src\NativeProviders
2222
EndProject
2323
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests-CUDA", "src\UnitTests\UnitTests-CUDA.csproj", "{E79C0395-01DC-4BC9-B86C-ED45790892C5}"
2424
EndProject
25+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenBLAS", "src\NativeProviders\Windows\OpenBLAS\OpenBLASWrapper.vcxproj", "{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}"
26+
EndProject
27+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests-OpenBLAS", "src\UnitTests\UnitTests-OpenBLAS.csproj", "{96B903EF-3EE1-4569-803C-0482D2F5ED37}"
28+
EndProject
2529
Global
2630
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2731
Debug|Any CPU = Debug|Any CPU
@@ -40,6 +44,10 @@ Global
4044
Release-MKL|Mixed Platforms = Release-MKL|Mixed Platforms
4145
Release-MKL|Win32 = Release-MKL|Win32
4246
Release-MKL|x64 = Release-MKL|x64
47+
Release-OpenBLAS|Any CPU = Release-OpenBLAS|Any CPU
48+
Release-OpenBLAS|Mixed Platforms = Release-OpenBLAS|Mixed Platforms
49+
Release-OpenBLAS|Win32 = Release-OpenBLAS|Win32
50+
Release-OpenBLAS|x64 = Release-OpenBLAS|x64
4351
Release-Signed|Any CPU = Release-Signed|Any CPU
4452
Release-Signed|Mixed Platforms = Release-Signed|Mixed Platforms
4553
Release-Signed|Win32 = Release-Signed|Win32
@@ -72,6 +80,11 @@ Global
7280
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|Win32.Build.0 = Release|Win32
7381
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|x64.ActiveCfg = Release|x64
7482
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-MKL|x64.Build.0 = Release|x64
83+
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Win32
84+
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Win32
85+
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|Win32
86+
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-OpenBLAS|Win32.ActiveCfg = Release|Win32
87+
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-OpenBLAS|x64.ActiveCfg = Release|x64
7588
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|Any CPU.ActiveCfg = Release|Win32
7689
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Win32
7790
{C0B0DBA9-7FB0-4C87-BDB1-3EED19DC2B8F}.Release-Signed|Mixed Platforms.Build.0 = Release|Win32
@@ -95,6 +108,10 @@ Global
95108
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-MKL|Mixed Platforms.ActiveCfg = Release|Win32
96109
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-MKL|Win32.ActiveCfg = Release|Win32
97110
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-MKL|x64.ActiveCfg = Release|x64
111+
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Win32
112+
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Win32
113+
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-OpenBLAS|Win32.ActiveCfg = Release|Win32
114+
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-OpenBLAS|x64.ActiveCfg = Release|x64
98115
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-Signed|Any CPU.ActiveCfg = Release|Win32
99116
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Win32
100117
{2362B8AC-C52B-45E4-A1BF-C682A4DB4220}.Release-Signed|Win32.ActiveCfg = Release|Win32
@@ -133,6 +150,14 @@ Global
133150
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|Win32.Build.0 = Release|Any CPU
134151
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|x64.ActiveCfg = Release|Any CPU
135152
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-MKL|x64.Build.0 = Release|Any CPU
153+
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Any CPU
154+
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Any CPU.Build.0 = Release|Any CPU
155+
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Any CPU
156+
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|Any CPU
157+
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Win32.ActiveCfg = Release|Any CPU
158+
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|Win32.Build.0 = Release|Any CPU
159+
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|x64.ActiveCfg = Release|Any CPU
160+
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-OpenBLAS|x64.Build.0 = Release|Any CPU
136161
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Any CPU.ActiveCfg = Release-Signed|Any CPU
137162
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Any CPU.Build.0 = Release-Signed|Any CPU
138163
{B7CAE5F4-A23F-4438-B5BE-41226618B695}.Release-Signed|Mixed Platforms.ActiveCfg = Release-Signed|Any CPU
@@ -165,6 +190,12 @@ Global
165190
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|Win32.Build.0 = Release|Any CPU
166191
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|x64.ActiveCfg = Release|Any CPU
167192
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-MKL|x64.Build.0 = Release|Any CPU
193+
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Any CPU
194+
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-OpenBLAS|Any CPU.Build.0 = Release|Any CPU
195+
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Any CPU
196+
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|Any CPU
197+
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-OpenBLAS|Win32.ActiveCfg = Release|Any CPU
198+
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-OpenBLAS|x64.ActiveCfg = Release|Any CPU
168199
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
169200
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
170201
{3515A344-AB5F-41C7-A14C-04A79B3FFAB1}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -197,6 +228,11 @@ Global
197228
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-MKL|Mixed Platforms.Build.0 = Release|Win32
198229
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-MKL|Win32.ActiveCfg = Release|Win32
199230
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-MKL|x64.ActiveCfg = Release|x64
231+
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Win32
232+
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Win32
233+
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|Win32
234+
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-OpenBLAS|Win32.ActiveCfg = Release|Win32
235+
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-OpenBLAS|x64.ActiveCfg = Release|x64
200236
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|Any CPU.ActiveCfg = Release|Win32
201237
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Win32
202238
{5A52B796-7F41-4C90-8DE2-F3F391C4482C}.Release-Signed|Mixed Platforms.Build.0 = Release|Win32
@@ -229,12 +265,85 @@ Global
229265
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-MKL|Mixed Platforms.Build.0 = Release|Any CPU
230266
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-MKL|Win32.ActiveCfg = Release|Any CPU
231267
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-MKL|x64.ActiveCfg = Release|Any CPU
268+
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Any CPU
269+
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-OpenBLAS|Any CPU.Build.0 = Release|Any CPU
270+
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Any CPU
271+
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|Any CPU
272+
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-OpenBLAS|Win32.ActiveCfg = Release|Any CPU
273+
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-OpenBLAS|x64.ActiveCfg = Release|Any CPU
232274
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
233275
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
234276
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
235277
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
236278
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
237279
{E79C0395-01DC-4BC9-B86C-ED45790892C5}.Release-Signed|x64.ActiveCfg = Release|Any CPU
280+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Any CPU.ActiveCfg = Debug|Win32
281+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
282+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
283+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Win32.ActiveCfg = Debug|Win32
284+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|Win32.Build.0 = Debug|Win32
285+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|x64.ActiveCfg = Debug|x64
286+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Debug|x64.Build.0 = Debug|x64
287+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Any CPU.ActiveCfg = Release|Win32
288+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
289+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Mixed Platforms.Build.0 = Release|Win32
290+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Win32.ActiveCfg = Release|Win32
291+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|Win32.Build.0 = Release|Win32
292+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|x64.ActiveCfg = Release|x64
293+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release|x64.Build.0 = Release|x64
294+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-CUDA|Any CPU.ActiveCfg = Release|Win32
295+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-CUDA|Mixed Platforms.ActiveCfg = Release|Win32
296+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-CUDA|Win32.ActiveCfg = Release|Win32
297+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-CUDA|x64.ActiveCfg = Release|x64
298+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-MKL|Any CPU.ActiveCfg = Release|Win32
299+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-MKL|Mixed Platforms.ActiveCfg = Release|Win32
300+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-MKL|Win32.ActiveCfg = Release|Win32
301+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-MKL|x64.ActiveCfg = Release|x64
302+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Win32
303+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Win32
304+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|Win32.ActiveCfg = Release|Win32
305+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|Win32.Build.0 = Release|Win32
306+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|x64.ActiveCfg = Release|x64
307+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-OpenBLAS|x64.Build.0 = Release|x64
308+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Any CPU.ActiveCfg = Release|Win32
309+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Win32
310+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Mixed Platforms.Build.0 = Release|Win32
311+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Win32.ActiveCfg = Release|Win32
312+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|Win32.Build.0 = Release|Win32
313+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|x64.ActiveCfg = Release|x64
314+
{CB4011B6-E9A7-480B-A7B1-8492039DAAD1}.Release-Signed|x64.Build.0 = Release|x64
315+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
316+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Any CPU.Build.0 = Debug|Any CPU
317+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
318+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
319+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|Win32.ActiveCfg = Debug|Any CPU
320+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Debug|x64.ActiveCfg = Debug|Any CPU
321+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Any CPU.ActiveCfg = Release|Any CPU
322+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Any CPU.Build.0 = Release|Any CPU
323+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
324+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Mixed Platforms.Build.0 = Release|Any CPU
325+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|Win32.ActiveCfg = Release|Any CPU
326+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release|x64.ActiveCfg = Release|Any CPU
327+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-CUDA|Any CPU.ActiveCfg = Release|Any CPU
328+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-CUDA|Mixed Platforms.ActiveCfg = Release|Any CPU
329+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-CUDA|Win32.ActiveCfg = Release|Any CPU
330+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-CUDA|x64.ActiveCfg = Release|Any CPU
331+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-MKL|Any CPU.ActiveCfg = Release|Any CPU
332+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-MKL|Mixed Platforms.ActiveCfg = Release|Any CPU
333+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-MKL|Win32.ActiveCfg = Release|Any CPU
334+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-MKL|x64.ActiveCfg = Release|Any CPU
335+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|Any CPU
336+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|Any CPU
337+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|Win32.ActiveCfg = Release|Any CPU
338+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|Win32.Build.0 = Release|Any CPU
339+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|x64.ActiveCfg = Release|Any CPU
340+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-OpenBLAS|x64.Build.0 = Release|Any CPU
341+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Any CPU.ActiveCfg = Release|Any CPU
342+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Any CPU.Build.0 = Release|Any CPU
343+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
344+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Mixed Platforms.Build.0 = Release|Any CPU
345+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|Win32.ActiveCfg = Release|Any CPU
346+
{96B903EF-3EE1-4569-803C-0482D2F5ED37}.Release-Signed|x64.ActiveCfg = Release|Any CPU
238347
EndGlobalSection
239348
GlobalSection(SolutionProperties) = preSolution
240349
HideSolutionNode = FALSE

src/NativeProviders/OpenBLAS/blas.c

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#include "cblas.h"
2+
#include "wrapper_common.h"
3+
4+
#if GCC
5+
extern "C" {
6+
#endif
7+
DLLEXPORT void s_axpy(const blasint n, const float alpha, const float x[], float y[]){
8+
cblas_saxpy(n, alpha, x, 1, y, 1);
9+
}
10+
11+
DLLEXPORT void d_axpy(const blasint n, const double alpha, const double x[], double y[]){
12+
cblas_daxpy(n, alpha, x, 1, y, 1);
13+
}
14+
15+
DLLEXPORT void c_axpy(const blasint n, const openblas_complex_float alpha, const openblas_complex_float x[], openblas_complex_float y[]){
16+
cblas_caxpy(n, (float*)&alpha, (float*)x, 1, (float*)y, 1);
17+
}
18+
19+
DLLEXPORT void z_axpy(const blasint n, const openblas_complex_double alpha, const openblas_complex_double x[], openblas_complex_double y[]){
20+
cblas_zaxpy(n, (double*)&alpha, (double*)x, 1, (double*)y, 1);
21+
}
22+
23+
DLLEXPORT void s_scale(const blasint n, const float alpha, float x[]){
24+
cblas_sscal(n, alpha, x, 1);
25+
}
26+
27+
DLLEXPORT void d_scale(const blasint n, const double alpha, double x[]){
28+
cblas_dscal(n, alpha, x, 1);
29+
}
30+
31+
DLLEXPORT void c_scale(const blasint n, const openblas_complex_float alpha, openblas_complex_float x[]){
32+
cblas_cscal(n, (float*)&alpha, (float*)x, 1);
33+
}
34+
35+
DLLEXPORT void z_scale(const blasint n, const openblas_complex_double alpha, openblas_complex_double x[]){
36+
cblas_zscal(n, (double*)&alpha, (double*)x, 1);
37+
}
38+
39+
DLLEXPORT float s_dot_product(const blasint n, const float x[], const float y[]){
40+
return cblas_sdot(n, x, 1, y, 1);
41+
}
42+
43+
DLLEXPORT double d_dot_product(const blasint n, const double x[], const double y[]){
44+
return cblas_ddot(n, x, 1, y, 1);
45+
}
46+
47+
DLLEXPORT openblas_complex_float c_dot_product(const blasint n, const openblas_complex_float x[], const openblas_complex_float y[]){
48+
openblas_complex_float ret;
49+
cblas_cdotu_sub(n, (float*)x, 1, (float*)y, 1, &ret);
50+
return ret;
51+
}
52+
53+
DLLEXPORT openblas_complex_double z_dot_product(const blasint n, const openblas_complex_double x[], const openblas_complex_double y[]){
54+
openblas_complex_double ret;
55+
cblas_zdotu_sub(n, (double*)x, 1, (double*)y, 1, &ret);
56+
return ret;
57+
}
58+
59+
DLLEXPORT void s_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const blasint m, const blasint n, const blasint k, const float alpha, const float x[], const float y[], const float beta, float c[]){
60+
blasint lda = transA == CblasNoTrans ? m : k;
61+
blasint ldb = transB == CblasNoTrans ? k : n;
62+
63+
cblas_sgemm(CblasColMajor, transA, transB, m, n, k, alpha, x, lda, y, ldb, beta, c, m);
64+
}
65+
66+
DLLEXPORT void d_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const blasint m, const blasint n, const blasint k, const double alpha, const double x[], const double y[], const double beta, double c[]){
67+
blasint lda = transA == CblasNoTrans ? m : k;
68+
blasint ldb = transB == CblasNoTrans ? k : n;
69+
70+
cblas_dgemm(CblasColMajor, transA, transB, m, n, k, alpha, x, lda, y, ldb, beta, c, m);
71+
}
72+
73+
DLLEXPORT void c_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const blasint m, const blasint n, const blasint k, const openblas_complex_float alpha, const openblas_complex_float x[], const openblas_complex_float y[], const openblas_complex_float beta, openblas_complex_float c[]){
74+
blasint lda = transA == CblasNoTrans ? m : k;
75+
blasint ldb = transB == CblasNoTrans ? k : n;
76+
77+
cblas_cgemm(CblasColMajor, transA, transB, m, n, k, (float*)&alpha, (float*)x, lda, (float*)y, ldb, (float*)&beta, (float*)c, m);
78+
}
79+
80+
DLLEXPORT void z_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const blasint m, const blasint n, const blasint k, const openblas_complex_double alpha, const openblas_complex_double x[], const openblas_complex_double y[], const openblas_complex_double beta, openblas_complex_double c[]){
81+
blasint lda = transA == CblasNoTrans ? m : k;
82+
blasint ldb = transB == CblasNoTrans ? k : n;
83+
84+
cblas_zgemm(CblasColMajor, transA, transB, m, n, k, (double*)&alpha, (double*)x, lda, (double*)y, ldb, (double*)&beta, (double*)c, m);
85+
}
86+
87+
#if GCC
88+
}
89+
#endif
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#include "wrapper_common.h"
2+
#include "cblas.h"
3+
4+
#ifdef __cplusplus
5+
extern "C" {
6+
#endif /* __cplusplus */
7+
8+
/*
9+
Capability is supported if >0
10+
11+
Actual number can be increased over time to indicate
12+
extensions/revisions (that do not break compatibility)
13+
*/
14+
DLLEXPORT int query_capability(const int capability)
15+
{
16+
switch (capability)
17+
{
18+
19+
// SANITY CHECKS
20+
case 0: return 0;
21+
case 1: return -1;
22+
23+
// PLATFORM
24+
case 8:
25+
#ifdef _M_IX86
26+
return 1;
27+
#else
28+
return 0;
29+
#endif
30+
case 9:
31+
#ifdef _M_X64
32+
return 1;
33+
#else
34+
return 0;
35+
#endif
36+
case 10:
37+
#ifdef _M_IA64
38+
return 1;
39+
#else
40+
return 0;
41+
#endif
42+
43+
// COMMON/SHARED
44+
case 64: return 7; // revision
45+
case 66: return 1; // threading control
46+
47+
// LINEAR ALGEBRA
48+
case 128: return 1; // basic dense linear algebra
49+
50+
default: return 0; // unknown or not supported
51+
52+
}
53+
}
54+
55+
DLLEXPORT void set_max_threads(const blasint num_threads)
56+
{
57+
openblas_set_num_threads(num_threads);
58+
}
59+
60+
DLLEXPORT char* get_build_config()
61+
{
62+
return openblas_get_config();
63+
}
64+
65+
DLLEXPORT char* get_cpu_core()
66+
{
67+
return openblas_get_corename();
68+
}
69+
70+
DLLEXPORT int get_parallel_type()
71+
{
72+
return openblas_get_parallel();
73+
}
74+
75+
#ifdef __cplusplus
76+
}
77+
#endif /* __cplusplus */
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
template <typename _T>
2+
struct complex
3+
{
4+
_T real, imag;
5+
6+
complex(_T _real = 0, _T _imag = 0)
7+
{
8+
real = _real;
9+
imag = _imag;
10+
}
11+
12+
complex(const complex<_T>& right)
13+
{
14+
real = right.real;
15+
imag = right.imag;
16+
}
17+
18+
complex& operator=(const complex& right)
19+
{
20+
real = right.real;
21+
imag = right.imag;
22+
return *this;
23+
}
24+
25+
complex& operator=(const _T& right)
26+
{
27+
real = right;
28+
imag = 0;
29+
return *this;
30+
}
31+
32+
template<typename _Other> inline
33+
complex& operator=(const complex<_Other>& right)
34+
{
35+
real = (_T)right.real;
36+
imag = (_T)right.imag;
37+
return *this;
38+
}
39+
};

0 commit comments

Comments
 (0)