Why is valarray so slow on Visual Studio 2015?Why is valarray so slow?Why can templates only be implemented in the header file?Why is “using namespace std” considered bad practice?Improve INSERT-per-second performance of SQLite?Why do we need virtual functions in C++?Why are elementwise additions much faster in separate loops than in a combined loop?Why does changing 0.1f to 0 slow down performance by 10x?Why is reading lines from stdin much slower in C++ than Python?Why is it faster to process a sorted array than an unsorted array?Why is my program slow when looping over exactly 8192 elements?Why should I use a pointer rather than the object itself?

How would a developer who mostly fixed bugs for years at a company call out their contributions in their CV?

How does Dreadhorde Arcanist interact with split cards?

Where is Jon going?

Ribbon Cable Cross Talk - Is there a fix after the fact?

What is Orcus doing with Mind Flayers in the art on the last page of Volo's Guide to Monsters?

Was this scene in S8E06 added because of fan reactions to S8E04?

How to deceive the MC

If I arrive in the UK, and then head to mainland Europe, does my Schengen visa 90 day limit start when I arrived in the UK, or mainland Europe?

Can diplomats be allowed on the flight deck of a commercial European airline?

Split into three!

How to write numbers and percentage?

Fill area of x^2+y^2>1 and x^2+y^2>4 using patterns and tikzpicture

Unary Enumeration

How to escape dependency hell?

Papers on ArXiv as main references

ifconfig shows UP while ip link shows DOWN

What could be my risk mitigation strategies if my client wants to contract UAT?

Local variables in DynamicModule affected by outside evaluation

One word for 'the thing that attracts me'?

Why is unzipped directory exactly 4.0K (much smaller than zipped file)?

Is keeping the forking link on a true fork necessary (Github/GPL)?

How does the Earth's center produce heat?

Status of proof by contradiction and excluded middle throughout the history of mathematics?

Is superuser the same as root?



Why is valarray so slow on Visual Studio 2015?


Why is valarray so slow?Why can templates only be implemented in the header file?Why is “using namespace std” considered bad practice?Improve INSERT-per-second performance of SQLite?Why do we need virtual functions in C++?Why are elementwise additions much faster in separate loops than in a combined loop?Why does changing 0.1f to 0 slow down performance by 10x?Why is reading lines from stdin much slower in C++ than Python?Why is it faster to process a sorted array than an unsorted array?Why is my program slow when looping over exactly 8192 elements?Why should I use a pointer rather than the object itself?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








16















To speed up the calculations in my library, I decided to use the std::valarray class. The documentation says:




std::valarray and helper classes are defined to be free of certain
forms of aliasing, thus allowing operations on these classes to be
optimized similar to the effect of the keyword restrict in the C
programming language. In addition, functions and operators that take
valarray arguments are allowed to return proxy objects to make it
possible for the compiler to optimize an expression such as v1 = a * v2
+ v3; as a single loop that executes v1[i] = a * v2[i] + v3[i]; avoiding any temporaries or multiple passes.




This is exactly what I need. And it works as described in the documentation when I use the g++ compiler. I have developed a simple example to test the std::valarray performance:



void check(std::valarray<float>& a)

for (int i = 0; i < a.size(); i++)
if (a[i] != 7)
std::cout << "Error" << std::endl;


int main()

const int N = 100000000;
std::valarray<float> a(1, N);
std::valarray<float> c(2, N);
std::valarray<float> b(3, N);
std::valarray<float> d(N);

auto start = std::chrono::system_clock::now();
d = a + b * c;
auto end = std::chrono::system_clock::now();

std::cout << "Valarr optimized case: "
<< (end - start).count() << std::endl;

check(d);

// Optimal single loop case
start = std::chrono::system_clock::now();
for (int i = 0; i < N; i++)
d[i] = a[i] + b[i] * c[i];
end = std::chrono::system_clock::now();
std::cout << "Optimal case: " << (end - start).count() << std::endl;

check(d);
return 0;



On g++ I got:



Valarr optimized case: 1484215
Optimal case: 1472202


It seems that all operations d = a + b * c; are really placed in one cycle, which simplifies the code while maintaining performance. However, this does not work when I use Visual Studio 2015. For the same code, I get:



Valarr optimized case: 6652402
Optimal case: 1766699


The difference is almost four times; there is no optimization! Why is std::valarray not working as needed on Visual Studio 2015? Am I doing everything right? How can I solve the problem without abandoning std::valarray?










share|improve this question
























  • Did you compile with optimizations on VS2015?

    – J. Antonio Perez
    May 8 at 23:35











  • I used Release platform on VS and -O2 optimisation for g++

    – dilbert
    May 8 at 23:36






  • 2





    Look at this answer. stackoverflow.com/a/6851413/11472661 .

    – Dmytro Dadyka
    May 9 at 0:37

















16















To speed up the calculations in my library, I decided to use the std::valarray class. The documentation says:




std::valarray and helper classes are defined to be free of certain
forms of aliasing, thus allowing operations on these classes to be
optimized similar to the effect of the keyword restrict in the C
programming language. In addition, functions and operators that take
valarray arguments are allowed to return proxy objects to make it
possible for the compiler to optimize an expression such as v1 = a * v2
+ v3; as a single loop that executes v1[i] = a * v2[i] + v3[i]; avoiding any temporaries or multiple passes.




This is exactly what I need. And it works as described in the documentation when I use the g++ compiler. I have developed a simple example to test the std::valarray performance:



void check(std::valarray<float>& a)

for (int i = 0; i < a.size(); i++)
if (a[i] != 7)
std::cout << "Error" << std::endl;


int main()

const int N = 100000000;
std::valarray<float> a(1, N);
std::valarray<float> c(2, N);
std::valarray<float> b(3, N);
std::valarray<float> d(N);

auto start = std::chrono::system_clock::now();
d = a + b * c;
auto end = std::chrono::system_clock::now();

std::cout << "Valarr optimized case: "
<< (end - start).count() << std::endl;

check(d);

// Optimal single loop case
start = std::chrono::system_clock::now();
for (int i = 0; i < N; i++)
d[i] = a[i] + b[i] * c[i];
end = std::chrono::system_clock::now();
std::cout << "Optimal case: " << (end - start).count() << std::endl;

check(d);
return 0;



On g++ I got:



Valarr optimized case: 1484215
Optimal case: 1472202


It seems that all operations d = a + b * c; are really placed in one cycle, which simplifies the code while maintaining performance. However, this does not work when I use Visual Studio 2015. For the same code, I get:



Valarr optimized case: 6652402
Optimal case: 1766699


The difference is almost four times; there is no optimization! Why is std::valarray not working as needed on Visual Studio 2015? Am I doing everything right? How can I solve the problem without abandoning std::valarray?










share|improve this question
























  • Did you compile with optimizations on VS2015?

    – J. Antonio Perez
    May 8 at 23:35











  • I used Release platform on VS and -O2 optimisation for g++

    – dilbert
    May 8 at 23:36






  • 2





    Look at this answer. stackoverflow.com/a/6851413/11472661 .

    – Dmytro Dadyka
    May 9 at 0:37













16












16








16


0






To speed up the calculations in my library, I decided to use the std::valarray class. The documentation says:




std::valarray and helper classes are defined to be free of certain
forms of aliasing, thus allowing operations on these classes to be
optimized similar to the effect of the keyword restrict in the C
programming language. In addition, functions and operators that take
valarray arguments are allowed to return proxy objects to make it
possible for the compiler to optimize an expression such as v1 = a * v2
+ v3; as a single loop that executes v1[i] = a * v2[i] + v3[i]; avoiding any temporaries or multiple passes.




This is exactly what I need. And it works as described in the documentation when I use the g++ compiler. I have developed a simple example to test the std::valarray performance:



void check(std::valarray<float>& a)

for (int i = 0; i < a.size(); i++)
if (a[i] != 7)
std::cout << "Error" << std::endl;


int main()

const int N = 100000000;
std::valarray<float> a(1, N);
std::valarray<float> c(2, N);
std::valarray<float> b(3, N);
std::valarray<float> d(N);

auto start = std::chrono::system_clock::now();
d = a + b * c;
auto end = std::chrono::system_clock::now();

std::cout << "Valarr optimized case: "
<< (end - start).count() << std::endl;

check(d);

// Optimal single loop case
start = std::chrono::system_clock::now();
for (int i = 0; i < N; i++)
d[i] = a[i] + b[i] * c[i];
end = std::chrono::system_clock::now();
std::cout << "Optimal case: " << (end - start).count() << std::endl;

check(d);
return 0;



On g++ I got:



Valarr optimized case: 1484215
Optimal case: 1472202


It seems that all operations d = a + b * c; are really placed in one cycle, which simplifies the code while maintaining performance. However, this does not work when I use Visual Studio 2015. For the same code, I get:



Valarr optimized case: 6652402
Optimal case: 1766699


The difference is almost four times; there is no optimization! Why is std::valarray not working as needed on Visual Studio 2015? Am I doing everything right? How can I solve the problem without abandoning std::valarray?










share|improve this question
















To speed up the calculations in my library, I decided to use the std::valarray class. The documentation says:




std::valarray and helper classes are defined to be free of certain
forms of aliasing, thus allowing operations on these classes to be
optimized similar to the effect of the keyword restrict in the C
programming language. In addition, functions and operators that take
valarray arguments are allowed to return proxy objects to make it
possible for the compiler to optimize an expression such as v1 = a * v2
+ v3; as a single loop that executes v1[i] = a * v2[i] + v3[i]; avoiding any temporaries or multiple passes.




This is exactly what I need. And it works as described in the documentation when I use the g++ compiler. I have developed a simple example to test the std::valarray performance:



void check(std::valarray<float>& a)

for (int i = 0; i < a.size(); i++)
if (a[i] != 7)
std::cout << "Error" << std::endl;


int main()

const int N = 100000000;
std::valarray<float> a(1, N);
std::valarray<float> c(2, N);
std::valarray<float> b(3, N);
std::valarray<float> d(N);

auto start = std::chrono::system_clock::now();
d = a + b * c;
auto end = std::chrono::system_clock::now();

std::cout << "Valarr optimized case: "
<< (end - start).count() << std::endl;

check(d);

// Optimal single loop case
start = std::chrono::system_clock::now();
for (int i = 0; i < N; i++)
d[i] = a[i] + b[i] * c[i];
end = std::chrono::system_clock::now();
std::cout << "Optimal case: " << (end - start).count() << std::endl;

check(d);
return 0;



On g++ I got:



Valarr optimized case: 1484215
Optimal case: 1472202


It seems that all operations d = a + b * c; are really placed in one cycle, which simplifies the code while maintaining performance. However, this does not work when I use Visual Studio 2015. For the same code, I get:



Valarr optimized case: 6652402
Optimal case: 1766699


The difference is almost four times; there is no optimization! Why is std::valarray not working as needed on Visual Studio 2015? Am I doing everything right? How can I solve the problem without abandoning std::valarray?







c++ optimization valarray






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 9 at 9:09









Peter Mortensen

14.1k1988114




14.1k1988114










asked May 8 at 23:34









dilbertdilbert

836




836












  • Did you compile with optimizations on VS2015?

    – J. Antonio Perez
    May 8 at 23:35











  • I used Release platform on VS and -O2 optimisation for g++

    – dilbert
    May 8 at 23:36






  • 2





    Look at this answer. stackoverflow.com/a/6851413/11472661 .

    – Dmytro Dadyka
    May 9 at 0:37

















  • Did you compile with optimizations on VS2015?

    – J. Antonio Perez
    May 8 at 23:35











  • I used Release platform on VS and -O2 optimisation for g++

    – dilbert
    May 8 at 23:36






  • 2





    Look at this answer. stackoverflow.com/a/6851413/11472661 .

    – Dmytro Dadyka
    May 9 at 0:37
















Did you compile with optimizations on VS2015?

– J. Antonio Perez
May 8 at 23:35





Did you compile with optimizations on VS2015?

– J. Antonio Perez
May 8 at 23:35













I used Release platform on VS and -O2 optimisation for g++

– dilbert
May 8 at 23:36





I used Release platform on VS and -O2 optimisation for g++

– dilbert
May 8 at 23:36




2




2





Look at this answer. stackoverflow.com/a/6851413/11472661 .

– Dmytro Dadyka
May 9 at 0:37





Look at this answer. stackoverflow.com/a/6851413/11472661 .

– Dmytro Dadyka
May 9 at 0:37












1 Answer
1






active

oldest

votes


















20















Am I doing everything right?




You're doing everything right. The problem is in the Visual Studio std::valarray implementation.




Why is std::valarray not working as needed on Visual Studio 2015?




Just open the implementation of any valarray operator, for example operator+. You will see something like (after macro expansion):



 template<class _Ty> inline
valarray<_Ty> operator+(const valarray<_Ty>& _Left,
const valarray<_Ty>& _Right)

valarray<TYPE> _Ans(_Left.size());
for (size_t _Idx = 0; _Idx < _Ans.size(); ++_Idx)
_Ans[_Idx] = _Left[_Idx] + _Right[_Idx];
return (_Ans)



As you can see, a new object is created in which the result of the operation is copied. There really is no optimization. I do not know why, but it is a fact. It looks like in Visual Studio, std::valarray was added for compatibility only.



For comparison, consider the GNU implementation. As you can see, each operator returns the template class _Expr which contains only the operation, but does not contain data. The real computation is performed in the assignment operator and more specifically in the __valarray_copy function. Thus, until you perform assignment, all actions are performed on the proxy object _Expr. Only once operator= is called, is the operation stored in _Expr performed in a single loop. This is the reason why you get such good results with g++.




How can I solve the problem?




You need to find a suitable std::valarray implementation on the internet or you can write your own. You can use the GNU implementation as an example.






share|improve this answer




















  • 5





    I read an article about how valarray never quite had the performance that it was intended to have, in any compiler, so as a result, MSVC never bothered to optimize it, because it was always slow regardless.

    – Mooing Duck
    May 9 at 0:23






  • 3





    I looked in the GNU valarray implementation. In this implementation, a template proxy object is returned and real calculations only occur when assigning. Performance is only slightly below the explicit use of cycles. Looks like it’s still possible to get effective valarray.

    – Dmytro Dadyka
    May 9 at 0:33






  • 2





    developercommunity.visualstudio.com/content/problem/308961/… for MS reply to a bug report.

    – Marc Glisse
    May 9 at 5:59











  • @DmytroDadyka: You misunderstand. Microsoft's claim was that even with the optimizations in GNU, the valarray was only very slightly faster than the naive version, and still significantly slower than assembly using the desired commands.

    – Mooing Duck
    May 9 at 20:47











  • quora.com/Why-does-nobody-seem-to-use-std-valarray/answer/… Reading this, I vaguely remember that the problem was that users would make copies too often by accident, which completely negated the performance gains. Now that we have move constructors, that may or may not be better.

    – Mooing Duck
    May 9 at 20:57












Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56050322%2fwhy-is-valarray-so-slow-on-visual-studio-2015%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









20















Am I doing everything right?




You're doing everything right. The problem is in the Visual Studio std::valarray implementation.




Why is std::valarray not working as needed on Visual Studio 2015?




Just open the implementation of any valarray operator, for example operator+. You will see something like (after macro expansion):



 template<class _Ty> inline
valarray<_Ty> operator+(const valarray<_Ty>& _Left,
const valarray<_Ty>& _Right)

valarray<TYPE> _Ans(_Left.size());
for (size_t _Idx = 0; _Idx < _Ans.size(); ++_Idx)
_Ans[_Idx] = _Left[_Idx] + _Right[_Idx];
return (_Ans)



As you can see, a new object is created in which the result of the operation is copied. There really is no optimization. I do not know why, but it is a fact. It looks like in Visual Studio, std::valarray was added for compatibility only.



For comparison, consider the GNU implementation. As you can see, each operator returns the template class _Expr which contains only the operation, but does not contain data. The real computation is performed in the assignment operator and more specifically in the __valarray_copy function. Thus, until you perform assignment, all actions are performed on the proxy object _Expr. Only once operator= is called, is the operation stored in _Expr performed in a single loop. This is the reason why you get such good results with g++.




How can I solve the problem?




You need to find a suitable std::valarray implementation on the internet or you can write your own. You can use the GNU implementation as an example.






share|improve this answer




















  • 5





    I read an article about how valarray never quite had the performance that it was intended to have, in any compiler, so as a result, MSVC never bothered to optimize it, because it was always slow regardless.

    – Mooing Duck
    May 9 at 0:23






  • 3





    I looked in the GNU valarray implementation. In this implementation, a template proxy object is returned and real calculations only occur when assigning. Performance is only slightly below the explicit use of cycles. Looks like it’s still possible to get effective valarray.

    – Dmytro Dadyka
    May 9 at 0:33






  • 2





    developercommunity.visualstudio.com/content/problem/308961/… for MS reply to a bug report.

    – Marc Glisse
    May 9 at 5:59











  • @DmytroDadyka: You misunderstand. Microsoft's claim was that even with the optimizations in GNU, the valarray was only very slightly faster than the naive version, and still significantly slower than assembly using the desired commands.

    – Mooing Duck
    May 9 at 20:47











  • quora.com/Why-does-nobody-seem-to-use-std-valarray/answer/… Reading this, I vaguely remember that the problem was that users would make copies too often by accident, which completely negated the performance gains. Now that we have move constructors, that may or may not be better.

    – Mooing Duck
    May 9 at 20:57
















20















Am I doing everything right?




You're doing everything right. The problem is in the Visual Studio std::valarray implementation.




Why is std::valarray not working as needed on Visual Studio 2015?




Just open the implementation of any valarray operator, for example operator+. You will see something like (after macro expansion):



 template<class _Ty> inline
valarray<_Ty> operator+(const valarray<_Ty>& _Left,
const valarray<_Ty>& _Right)

valarray<TYPE> _Ans(_Left.size());
for (size_t _Idx = 0; _Idx < _Ans.size(); ++_Idx)
_Ans[_Idx] = _Left[_Idx] + _Right[_Idx];
return (_Ans)



As you can see, a new object is created in which the result of the operation is copied. There really is no optimization. I do not know why, but it is a fact. It looks like in Visual Studio, std::valarray was added for compatibility only.



For comparison, consider the GNU implementation. As you can see, each operator returns the template class _Expr which contains only the operation, but does not contain data. The real computation is performed in the assignment operator and more specifically in the __valarray_copy function. Thus, until you perform assignment, all actions are performed on the proxy object _Expr. Only once operator= is called, is the operation stored in _Expr performed in a single loop. This is the reason why you get such good results with g++.




How can I solve the problem?




You need to find a suitable std::valarray implementation on the internet or you can write your own. You can use the GNU implementation as an example.






share|improve this answer




















  • 5





    I read an article about how valarray never quite had the performance that it was intended to have, in any compiler, so as a result, MSVC never bothered to optimize it, because it was always slow regardless.

    – Mooing Duck
    May 9 at 0:23






  • 3





    I looked in the GNU valarray implementation. In this implementation, a template proxy object is returned and real calculations only occur when assigning. Performance is only slightly below the explicit use of cycles. Looks like it’s still possible to get effective valarray.

    – Dmytro Dadyka
    May 9 at 0:33






  • 2





    developercommunity.visualstudio.com/content/problem/308961/… for MS reply to a bug report.

    – Marc Glisse
    May 9 at 5:59











  • @DmytroDadyka: You misunderstand. Microsoft's claim was that even with the optimizations in GNU, the valarray was only very slightly faster than the naive version, and still significantly slower than assembly using the desired commands.

    – Mooing Duck
    May 9 at 20:47











  • quora.com/Why-does-nobody-seem-to-use-std-valarray/answer/… Reading this, I vaguely remember that the problem was that users would make copies too often by accident, which completely negated the performance gains. Now that we have move constructors, that may or may not be better.

    – Mooing Duck
    May 9 at 20:57














20












20








20








Am I doing everything right?




You're doing everything right. The problem is in the Visual Studio std::valarray implementation.




Why is std::valarray not working as needed on Visual Studio 2015?




Just open the implementation of any valarray operator, for example operator+. You will see something like (after macro expansion):



 template<class _Ty> inline
valarray<_Ty> operator+(const valarray<_Ty>& _Left,
const valarray<_Ty>& _Right)

valarray<TYPE> _Ans(_Left.size());
for (size_t _Idx = 0; _Idx < _Ans.size(); ++_Idx)
_Ans[_Idx] = _Left[_Idx] + _Right[_Idx];
return (_Ans)



As you can see, a new object is created in which the result of the operation is copied. There really is no optimization. I do not know why, but it is a fact. It looks like in Visual Studio, std::valarray was added for compatibility only.



For comparison, consider the GNU implementation. As you can see, each operator returns the template class _Expr which contains only the operation, but does not contain data. The real computation is performed in the assignment operator and more specifically in the __valarray_copy function. Thus, until you perform assignment, all actions are performed on the proxy object _Expr. Only once operator= is called, is the operation stored in _Expr performed in a single loop. This is the reason why you get such good results with g++.




How can I solve the problem?




You need to find a suitable std::valarray implementation on the internet or you can write your own. You can use the GNU implementation as an example.






share|improve this answer
















Am I doing everything right?




You're doing everything right. The problem is in the Visual Studio std::valarray implementation.




Why is std::valarray not working as needed on Visual Studio 2015?




Just open the implementation of any valarray operator, for example operator+. You will see something like (after macro expansion):



 template<class _Ty> inline
valarray<_Ty> operator+(const valarray<_Ty>& _Left,
const valarray<_Ty>& _Right)

valarray<TYPE> _Ans(_Left.size());
for (size_t _Idx = 0; _Idx < _Ans.size(); ++_Idx)
_Ans[_Idx] = _Left[_Idx] + _Right[_Idx];
return (_Ans)



As you can see, a new object is created in which the result of the operation is copied. There really is no optimization. I do not know why, but it is a fact. It looks like in Visual Studio, std::valarray was added for compatibility only.



For comparison, consider the GNU implementation. As you can see, each operator returns the template class _Expr which contains only the operation, but does not contain data. The real computation is performed in the assignment operator and more specifically in the __valarray_copy function. Thus, until you perform assignment, all actions are performed on the proxy object _Expr. Only once operator= is called, is the operation stored in _Expr performed in a single loop. This is the reason why you get such good results with g++.




How can I solve the problem?




You need to find a suitable std::valarray implementation on the internet or you can write your own. You can use the GNU implementation as an example.







share|improve this answer














share|improve this answer



share|improve this answer








edited May 9 at 9:11









Peter Mortensen

14.1k1988114




14.1k1988114










answered May 8 at 23:57









Dmytro DadykaDmytro Dadyka

1,6642824




1,6642824







  • 5





    I read an article about how valarray never quite had the performance that it was intended to have, in any compiler, so as a result, MSVC never bothered to optimize it, because it was always slow regardless.

    – Mooing Duck
    May 9 at 0:23






  • 3





    I looked in the GNU valarray implementation. In this implementation, a template proxy object is returned and real calculations only occur when assigning. Performance is only slightly below the explicit use of cycles. Looks like it’s still possible to get effective valarray.

    – Dmytro Dadyka
    May 9 at 0:33






  • 2





    developercommunity.visualstudio.com/content/problem/308961/… for MS reply to a bug report.

    – Marc Glisse
    May 9 at 5:59











  • @DmytroDadyka: You misunderstand. Microsoft's claim was that even with the optimizations in GNU, the valarray was only very slightly faster than the naive version, and still significantly slower than assembly using the desired commands.

    – Mooing Duck
    May 9 at 20:47











  • quora.com/Why-does-nobody-seem-to-use-std-valarray/answer/… Reading this, I vaguely remember that the problem was that users would make copies too often by accident, which completely negated the performance gains. Now that we have move constructors, that may or may not be better.

    – Mooing Duck
    May 9 at 20:57













  • 5





    I read an article about how valarray never quite had the performance that it was intended to have, in any compiler, so as a result, MSVC never bothered to optimize it, because it was always slow regardless.

    – Mooing Duck
    May 9 at 0:23






  • 3





    I looked in the GNU valarray implementation. In this implementation, a template proxy object is returned and real calculations only occur when assigning. Performance is only slightly below the explicit use of cycles. Looks like it’s still possible to get effective valarray.

    – Dmytro Dadyka
    May 9 at 0:33






  • 2





    developercommunity.visualstudio.com/content/problem/308961/… for MS reply to a bug report.

    – Marc Glisse
    May 9 at 5:59











  • @DmytroDadyka: You misunderstand. Microsoft's claim was that even with the optimizations in GNU, the valarray was only very slightly faster than the naive version, and still significantly slower than assembly using the desired commands.

    – Mooing Duck
    May 9 at 20:47











  • quora.com/Why-does-nobody-seem-to-use-std-valarray/answer/… Reading this, I vaguely remember that the problem was that users would make copies too often by accident, which completely negated the performance gains. Now that we have move constructors, that may or may not be better.

    – Mooing Duck
    May 9 at 20:57








5




5





I read an article about how valarray never quite had the performance that it was intended to have, in any compiler, so as a result, MSVC never bothered to optimize it, because it was always slow regardless.

– Mooing Duck
May 9 at 0:23





I read an article about how valarray never quite had the performance that it was intended to have, in any compiler, so as a result, MSVC never bothered to optimize it, because it was always slow regardless.

– Mooing Duck
May 9 at 0:23




3




3





I looked in the GNU valarray implementation. In this implementation, a template proxy object is returned and real calculations only occur when assigning. Performance is only slightly below the explicit use of cycles. Looks like it’s still possible to get effective valarray.

– Dmytro Dadyka
May 9 at 0:33





I looked in the GNU valarray implementation. In this implementation, a template proxy object is returned and real calculations only occur when assigning. Performance is only slightly below the explicit use of cycles. Looks like it’s still possible to get effective valarray.

– Dmytro Dadyka
May 9 at 0:33




2




2





developercommunity.visualstudio.com/content/problem/308961/… for MS reply to a bug report.

– Marc Glisse
May 9 at 5:59





developercommunity.visualstudio.com/content/problem/308961/… for MS reply to a bug report.

– Marc Glisse
May 9 at 5:59













@DmytroDadyka: You misunderstand. Microsoft's claim was that even with the optimizations in GNU, the valarray was only very slightly faster than the naive version, and still significantly slower than assembly using the desired commands.

– Mooing Duck
May 9 at 20:47





@DmytroDadyka: You misunderstand. Microsoft's claim was that even with the optimizations in GNU, the valarray was only very slightly faster than the naive version, and still significantly slower than assembly using the desired commands.

– Mooing Duck
May 9 at 20:47













quora.com/Why-does-nobody-seem-to-use-std-valarray/answer/… Reading this, I vaguely remember that the problem was that users would make copies too often by accident, which completely negated the performance gains. Now that we have move constructors, that may or may not be better.

– Mooing Duck
May 9 at 20:57






quora.com/Why-does-nobody-seem-to-use-std-valarray/answer/… Reading this, I vaguely remember that the problem was that users would make copies too often by accident, which completely negated the performance gains. Now that we have move constructors, that may or may not be better.

– Mooing Duck
May 9 at 20:57




















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56050322%2fwhy-is-valarray-so-slow-on-visual-studio-2015%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

Vilaño, A Laracha Índice Patrimonio | Lugares e parroquias | Véxase tamén | Menú de navegación43°14′52″N 8°36′03″O / 43.24775, -8.60070

Cegueira Índice Epidemioloxía | Deficiencia visual | Tipos de cegueira | Principais causas de cegueira | Tratamento | Técnicas de adaptación e axudas | Vida dos cegos | Primeiros auxilios | Crenzas respecto das persoas cegas | Crenzas das persoas cegas | O neno deficiente visual | Aspectos psicolóxicos da cegueira | Notas | Véxase tamén | Menú de navegación54.054.154.436928256blindnessDicionario da Real Academia GalegaPortal das Palabras"International Standards: Visual Standards — Aspects and Ranges of Vision Loss with Emphasis on Population Surveys.""Visual impairment and blindness""Presentan un plan para previr a cegueira"o orixinalACCDV Associació Catalana de Cecs i Disminuïts Visuals - PMFTrachoma"Effect of gene therapy on visual function in Leber's congenital amaurosis"1844137110.1056/NEJMoa0802268Cans guía - os mellores amigos dos cegosArquivadoEscola de cans guía para cegos en Mortágua, PortugalArquivado"Tecnología para ciegos y deficientes visuales. Recopilación de recursos gratuitos en la Red""Colorino""‘COL.diesis’, escuchar los sonidos del color""COL.diesis: Transforming Colour into Melody and Implementing the Result in a Colour Sensor Device"o orixinal"Sistema de desarrollo de sinestesia color-sonido para invidentes utilizando un protocolo de audio""Enseñanza táctil - geometría y color. Juegos didácticos para niños ciegos y videntes""Sistema Constanz"L'ocupació laboral dels cecs a l'Estat espanyol està pràcticament equiparada a la de les persones amb visió, entrevista amb Pedro ZuritaONCE (Organización Nacional de Cegos de España)Prevención da cegueiraDescrición de deficiencias visuais (Disc@pnet)Braillín, un boneco atractivo para calquera neno, con ou sen discapacidade, que permite familiarizarse co sistema de escritura e lectura brailleAxudas Técnicas36838ID00897494007150-90057129528256DOID:1432HP:0000618D001766C10.597.751.941.162C97109C0155020