ermig1979 / Simd

C++ image processing and machine learning library with using of SIMD: SSE, AVX, AVX-512, AMX for x86/x64, NEON for ARM.
http://ermig1979.github.io/Simd
MIT License
2.06k stars 412 forks source link

Premultiplication & vice versa #130

Closed mikeversteeg closed 3 years ago

mikeversteeg commented 4 years ago

Very happy with the added alpha support, your code is much faster than my "SIMD" attempts :)

I would very much like a function to convert a BGRA bitmap to premultiplied and vice versa. This would complete the alpha support in Simd.

PS: To convert a straight alpha color value bitmap to premultiplied format, multiply its R, G, and B values by A. To convert premultiplied to straight, divide R, G, and B by A. Keep in mind alpha can be 0, and values can never exceed 255.

ermig1979 commented 4 years ago

Hello! I have some questions:

1) When I perform alpha blending operation I use intermediate 16-bit integer values. Has premultiplied alpha image 16-bit channels?

2) Has premultiplied alpha image interlived channels? Or has it plane channels?

3) Excact phormula of backward transformation.

So it would better if you give me example (scalar implementation) of required algorithm in order to avoid possible ambiguity. I will make its vectorization.

mikeversteeg commented 4 years ago

Hi Ihar!

  1. The only formats I know and work with are the 32-bit BGRA bitmaps you already support in your other functions.
  2. See 1: interleaved.
  3. Premultiplication is done as follows:
Rp = R * A / 255
Gp = G * A / 255
Bp = B * A / 255
Ap = A

Note you can avoid the math for A=0 and for A=255.

Unpremultiplication, i.e. convert premultiplied back to straight, is:

R = Rp / A * 255
G = Gp / A * 255
B = Bp / A * 255
A = Ap

Note for A=0 you must make an exception and make the resulting color 0. For A=255 you can avoid the math. And yes, converting back & forth is lossy due to the rounding to 8 bit values stored in the bitmap.

Let me know if you have further questions. Thanks!

ermig1979 commented 4 years ago

Ок. I will implement it when has free time.

mikeversteeg commented 4 years ago

Wonderful! Looking forward to try it out.

ermig1979 commented 4 years ago

I added function AlphaPremutiply.

mikeversteeg commented 4 years ago

Thank you! Looking forward to testing it once released (and a rare visit to my office where I have pc with msvc installed).

ermig1979 commented 3 years ago

I added function AlphaUnpremutiply.

mikeversteeg commented 3 years ago

Saw you released the new functions, thank you! Unfortunately I have not been able to test it yet: I do not use MSVC so last year I had to build a dedicated PC just to compile your library and I currently do not have access to this PC. As soon as I can build your library I will let you know of the test results.

ermig1979 commented 3 years ago

I also use Simd mainly for Linux. MSVS projects are used to test Windows compatibility.

mikeversteeg commented 3 years ago

So I finally made it to my office but I am unable to make a build: I get 118 errors when trying to build vs2017w. It is the same setup as I used for previous builds. I will be here for another hour, after that it will probably be another few weeks. Here are the errors:

Severity Code Description Project File Line Suppression State Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 88
Error C2664 'void Simd::Base::SynetAddBias(const float ,size_t,size_t,float ,SimdTensorFormatType)': cannot convert argument 5 from 'SimdBool' to 'SimdTensorFormatType' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 38
Error C3861 'NeuralRelu': identifier not found Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 66
Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 79
Error C3861 'NeuralRelu': identifier not found Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 94
Error C3861 'SynetRestrictRange': identifier not found Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 122 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 133 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 142 Error C2664 'void Simd::Base::SynetPreluLayerForward(const float ,const float ,size_t,size_t,float ,SimdTensorFormatType)': cannot convert argument 6 from 'SimdBool' to 'SimdTensorFormatType' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 148 Error C2661 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Init': no overloaded function takes 4 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 185 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 224 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 248 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 251 Error C2039 'Winograd2x3SetFilter': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 551 Error C2065 'Winograd2x3SetFilter': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 551 Error C2039 'Winograd2x3SetInput': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 552 Error C2065 'Winograd2x3SetInput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 552 Error C2039 'Winograd2x3SetOutput': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 553 Error C2065 'Winograd2x3SetOutput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 553 Error C2039 'Winograd4x3SetFilter': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 556 Error C2065 'Winograd4x3SetFilter': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 556 Error C2039 'Winograd4x3SetInput': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 557 Error C2065 'Winograd4x3SetInput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 557 Error C2039 'Winograd4x3SetOutput': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 558 Error C2065 'Winograd4x3SetOutput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 558 Error C2661 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Init': no overloaded function takes 4 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 563 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 606 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 626 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 632 Error C2976 'Simd::GemmNNcb': too few template arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 36
Error C2079 'Simd::Sse::CreateNhwcGemm' uses undefined class 'Simd::GemmNNcb' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 39
Error C2955 'Simd::GemmNNcb': use of class template requires template argument list Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 43
Error C2955 'Simd::GemmNNcb': use of class template requires template argument list Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 44
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 52
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 53
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 54
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 55
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 62
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 63
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 64
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 65
Error C2440 '': cannot convert from 'initializer list' to 'Simd::Sse::NhwcGemm' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 75
Error C2514 'Simd::GemmNNcb': class has no constructors Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 80
Error C2663 'Simd::GemmNNcb<T,F,TM>::Run': 2 overloads have no legal conversion for 'this' pointer Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 81
Error C2514 'Simd::GemmNNcb': class has no constructors Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 86
Error C2662 'void Simd::GemmNNcb<T,F,TM>::ReorderB(const T
,size_t,T )': cannot convert 'this' pointer from 'Simd::Sse::NhwcGemm' to 'Simd::GemmNNcb<T,F,TM> &' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 87
Error C2664 'void Simd::Sse::SynetAddBias(const float
,size_t,size_t,float ,SimdTensorFormatType)': cannot convert argument 5 from 'SimdBool' to 'SimdTensorFormatType' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 96
Error C3861 'NeuralRelu': identifier not found Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 139 Error C2660 'Simd::Sse::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 156 Error C2660 '_mm_storeu_ps': function does not take 1 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 156 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 159 Error C2660 'Simd::Sse::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 172 Error C2660 '_mm_storeu_ps': function does not take 1 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 172 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 175 Error C3861 'NeuralRelu': identifier not found Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 181 Error C3861 'SynetRestrictRange': identifier not found Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 224 Error C2660 'Simd::Sse::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 238 Error C2660 '_mm_storeu_ps': function does not take 1 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 238 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 241 Error C2660 'Simd::Sse::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 255 Error C2660 '_mm_storeu_ps': function does not take 1 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 255 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 258 Error C2664 'void Simd::Sse::SynetPreluLayerForward(const float
,const float ,size_t,size_t,float ,SimdTensorFormatType)': cannot convert argument 6 from 'SimdBool' to 'SimdTensorFormatType' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 264 Error C2661 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Init': no overloaded function takes 4 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 273 Error C2514 'Simd::GemmNNcb': class has no constructors Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 276 Error C2662 'size_t Simd::GemmNNcb<T,F,TM>::BufferSize(void) const': cannot convert 'this' pointer from 'Simd::Sse::NhwcGemm' to 'const Simd::GemmNNcb<T,F,TM> &' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 277 Error C2039 'Winograd2x3SetFilter': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 292 Error C2065 'Winograd2x3SetFilter': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 292 Error C2039 'Winograd2x3SetInput': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 293 Error C2065 'Winograd2x3SetInput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 293 Error C2039 'Winograd2x3SetOutput': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 294 Error C2065 'Winograd2x3SetOutput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 294 Error C2039 'Winograd4x3SetFilter': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 297 Error C2065 'Winograd4x3SetFilter': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 297 Error C2039 'Winograd4x3SetInput': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 298 Error C2065 'Winograd4x3SetInput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 298 Error C2039 'Winograd4x3SetOutput': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 299 Error C2065 'Winograd4x3SetOutput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 299 Error C2661 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Init': no overloaded function takes 4 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 304 Error C2514 'Simd::GemmNNcb': class has no constructors Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 307 Error C2662 'size_t Simd::GemmNNcb<T,F,TM>::BufferSize(void) const': cannot convert 'this' pointer from 'Simd::Sse::NhwcGemm' to 'const Simd::GemmNNcb<T,F,TM> &' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 308 Error LNK1181 cannot open input file 'E:\My Documents\SimdLib\bin\v141\x64\Release\Alg.lib' Simd E:\My Documents\SimdLib\prj\vs2017w\LINK 1
Error C2039 'SimdConvolutionExternalBufferSize': is not a member of 'global namespace'' Test e:\my documents\simdlib\src\test\testconvolution.cpp 115 Error C3861 'SimdConvolutionExternalBufferSize': identifier not found Test e:\my documents\simdlib\src\test\testconvolution.cpp 115 Error C2039 'SimdConvolutionSetParams': is not a member of 'global namespace'' Test e:\my documents\simdlib\src\test\testconvolution.cpp 116 Error C3861 'SimdConvolutionSetParams': identifier not found Test e:\my documents\simdlib\src\test\testconvolution.cpp 116 Error C2039 'SimdConvolutionForward': is not a member of 'global namespace'' Test e:\my documents\simdlib\src\test\testconvolution.cpp 119 Error C3861 'SimdConvolutionForward': identifier not found Test e:\my documents\simdlib\src\test\testconvolution.cpp 119 Error C2065 'SimdConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testconvolution.cpp 493 Error C2661 'Test::ConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testconvolution.cpp 493 Error C2065 'SimdConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testconvolution.cpp 497 Error C2661 'Test::ConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testconvolution.cpp 497 Error C2065 'SimdConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testconvolution.cpp 502 Error C2661 'Test::ConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testconvolution.cpp 502 Error C2065 'SimdConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testconvolution.cpp 507 Error C2661 'Test::ConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testconvolution.cpp 507 Error C2065 'SimdConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testconvolution.cpp 512 Error C2661 'Test::ConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testconvolution.cpp 512 Error C2065 'SimdConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testconvolution.cpp 517 Error C2661 'Test::ConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testconvolution.cpp 517 Error C2039 'SimdMergedConvolutionExternalBufferSize': is not a member of 'global namespace'' Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 131 Error C3861 'SimdMergedConvolutionExternalBufferSize': identifier not found Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 131 Error C2039 'SimdMergedConvolutionSetParams': is not a member of 'global namespace'' Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 132 Error C3861 'SimdMergedConvolutionSetParams': identifier not found Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 132 Error C2039 'SimdMergedConvolutionForward': is not a member of 'global namespace'' Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 140 Error C3861 'SimdMergedConvolutionForward': identifier not found Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 140 Error C2664 'Test::Tensor::Tensor(const Test::Tensor &)': cannot convert argument 2 from 'float' to 'SimdTensorFormatType' Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 182 Error C2664 'Test::Tensor::Tensor(const Test::Tensor &)': cannot convert argument 2 from 'float' to 'SimdTensorFormatType' Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 183 Error C2065 'SimdMergedConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 232 Error C2661 'Test::MergedConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 232 Error C2065 'SimdMergedConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 236 Error C2661 'Test::MergedConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 236 Error C2065 'SimdMergedConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 241 Error C2661 'Test::MergedConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 241 Error C2065 'SimdMergedConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 246 Error C2661 'Test::MergedConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 246 Error C2065 'SimdMergedConvolutionInit': undeclared identifier Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 251 Error C2661 'Test::MergedConvolutionForwardAutoTest': no overloaded function takes 2 arguments Test e:\my documents\simdlib\src\test\testmergedconvolution.cpp 251

ermig1979 commented 3 years ago

Thank you for bug report. The errors were fixed.

mikeversteeg commented 3 years ago

I'm afraid there are still errors. Here are the ones for just Simd:

Severity Code Description Project File Line Suppression State Error C2514 'Simd::GemmNNcb': class has no constructors Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 307 Error C2664 'void Simd::Base::SynetAddBias(const float ,size_t,size_t,float ,SimdTensorFormatType)': cannot convert argument 5 from 'SimdBool' to 'SimdTensorFormatType' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 38
Error C3861 'NeuralRelu': identifier not found Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 66
Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 79
Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 88
Error C3861 'NeuralRelu': identifier not found Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 94
Error C3861 'SynetRestrictRange': identifier not found Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 122 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 133 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 142 Error C2664 'void Simd::Base::SynetPreluLayerForward(const float ,const float ,size_t,size_t,float ,SimdTensorFormatType)': cannot convert argument 6 from 'SimdBool' to 'SimdTensorFormatType' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 148 Error C2661 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Init': no overloaded function takes 4 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 185 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 224 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 248 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 251 Error C2039 'Winograd2x3SetFilter': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 551 Error C2065 'Winograd2x3SetFilter': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 551 Error C2039 'Winograd2x3SetInput': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 552 Error C2065 'Winograd2x3SetInput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 552 Error C2039 'Winograd2x3SetOutput': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 553 Error C2065 'Winograd2x3SetOutput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 553 Error C2039 'Winograd4x3SetFilter': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 556 Error C2065 'Winograd4x3SetFilter': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 556 Error C2039 'Winograd4x3SetInput': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 557 Error C2065 'Winograd4x3SetInput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 557 Error C2039 'Winograd4x3SetOutput': is not a member of 'Simd::Base' Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 558 Error C2065 'Winograd4x3SetOutput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 558 Error C2661 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Init': no overloaded function takes 4 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 563 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 606 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 626 Error C2660 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Run': function does not take 11 arguments Alg e:\my documents\simdlib\src\simd\simdbaseconvolution.cpp 632 Error C2976 'Simd::GemmNNcb': too few template arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 36
Error C2079 'Simd::Sse::CreateNhwcGemm' uses undefined class 'Simd::GemmNNcb' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 39
Error C2955 'Simd::GemmNNcb': use of class template requires template argument list Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 43
Error C2955 'Simd::GemmNNcb': use of class template requires template argument list Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 44
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 52
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 53
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 54
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 55
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 62
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 63
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 64
Error C2440 '=': cannot convert from 'void (__cdecl
)(size_t,size_t,float,const float ,size_t,const float ,size_t,size_t,float ,size_t,size_t)' to 'void (__cdecl )(size_t,size_t,T,const T ,size_t,const T ,size_t,size_t,T ,size_t,TM)' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 65
Error C2440 '': cannot convert from 'initializer list' to 'Simd::Sse::NhwcGemm' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 75
Error C2514 'Simd::GemmNNcb': class has no constructors Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 80
Error C2663 'Simd::GemmNNcb<T,F,TM>::Run': 2 overloads have no legal conversion for 'this' pointer Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 81
Error C2514 'Simd::GemmNNcb': class has no constructors Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 86
Error C2662 'void Simd::GemmNNcb<T,F,TM>::ReorderB(const T
,size_t,T )': cannot convert 'this' pointer from 'Simd::Sse::NhwcGemm' to 'Simd::GemmNNcb<T,F,TM> &' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 87
Error C2664 'void Simd::Sse::SynetAddBias(const float
,size_t,size_t,float ,SimdTensorFormatType)': cannot convert argument 5 from 'SimdBool' to 'SimdTensorFormatType' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 96
Error C3861 'NeuralRelu': identifier not found Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 139 Error C2660 'Simd::Sse::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 156 Error C2660 '_mm_storeu_ps': function does not take 1 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 156 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 159 Error C2660 'Simd::Sse::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 172 Error C2660 '_mm_storeu_ps': function does not take 1 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 172 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 175 Error C3861 'NeuralRelu': identifier not found Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 181 Error C3861 'SynetRestrictRange': identifier not found Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 224 Error C2660 'Simd::Sse::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 238 Error C2660 '_mm_storeu_ps': function does not take 1 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 238 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 241 Error C2660 'Simd::Sse::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 255 Error C2660 '_mm_storeu_ps': function does not take 1 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 255 Error C2660 'Simd::Base::SynetPreluLayerForward': function does not take 2 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 258 Error C2664 'void Simd::Sse::SynetPreluLayerForward(const float
,const float ,size_t,size_t,float ,SimdTensorFormatType)': cannot convert argument 6 from 'SimdBool' to 'SimdTensorFormatType' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 264 Error C2661 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Init': no overloaded function takes 4 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 273 Error C2514 'Simd::GemmNNcb': class has no constructors Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 276 Error C2662 'size_t Simd::GemmNNcb<T,F,TM>::BufferSize(void) const': cannot convert 'this' pointer from 'Simd::Sse::NhwcGemm' to 'const Simd::GemmNNcb<T,F,TM> &' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 277 Error C2039 'Winograd2x3SetFilter': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 292 Error C2065 'Winograd2x3SetFilter': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 292 Error C2039 'Winograd2x3SetInput': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 293 Error C2065 'Winograd2x3SetInput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 293 Error C2039 'Winograd2x3SetOutput': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 294 Error C2065 'Winograd2x3SetOutput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 294 Error C2039 'Winograd4x3SetFilter': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 297 Error C2065 'Winograd4x3SetFilter': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 297 Error C2039 'Winograd4x3SetInput': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 298 Error C2065 'Winograd4x3SetInput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 298 Error C2039 'Winograd4x3SetOutput': is not a member of 'Simd::Sse' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 299 Error C2065 'Winograd4x3SetOutput': undeclared identifier Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 299 Error C2661 'Simd::Runtime<Simd::GemmFunc,Simd::GemmArgs>::Init': no overloaded function takes 4 arguments Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 304 Error C2662 'size_t Simd::GemmNNcb<T,F,TM>::BufferSize(void) const': cannot convert 'this' pointer from 'Simd::Sse::NhwcGemm' to 'const Simd::GemmNNcb<T,F,TM> &' Alg e:\my documents\simdlib\src\simd\simdsse1convolution.cpp 308 Error LNK1181 cannot open input file 'E:\My Documents\SimdLib\bin\v141\x64\Release\Alg.lib' Simd E:\My Documents\SimdLib\prj\vs2017w\LINK 1

ermig1979 commented 3 years ago

Hello.

The current version of Simd does not contain file 'simdsse1convolution.cpp'. So I think that you did not update Simd sources properly.

mikeversteeg commented 3 years ago

I always unpack the zip and overwrite the old version. Then build vs2017w.

ermig1979 commented 3 years ago

You have to delete old files before copying.

mikeversteeg commented 3 years ago

Oh? I've never had to do that before.. Will try that next time I'm in the office, probably in a month or so.