Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


VS2012 Just Got Slow


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 Endemoniada   Members   -  Reputation: 345

Like
0Likes
Like

Posted 25 March 2013 - 04:40 PM

Hi guys,

 

I have a simple line of code that I call to set the values of a vertex:

 

setv(v++, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, color);

 

It's not inline and there are no macros. When I add about 150 of those and build the 'generating code' part takes a long time, like 5 seconds; without the lines it's pretty much instant. I don't understand. Thanks.

 

I'm using VS2012 on 32-bit Win8 Pro.

 



Sponsor:

#2 Bacterius   Crossbones+   -  Reputation: 10940

Like
0Likes
Like

Posted 25 March 2013 - 06:53 PM

What does setv do? Is it templated? How is it defined?


“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”


#3 BitMaster   Crossbones+   -  Reputation: 5483

Like
0Likes
Like

Posted 26 March 2013 - 02:19 AM

Or is it possible that calling setv switches on link time code generation for the whole program? In addition to Bacterius' questions, I'd like to add "Is setv from a statically linked library? How was that library compiled?"

#4 sgt_barnes   Members   -  Reputation: 704

Like
1Likes
Like

Posted 26 March 2013 - 07:35 AM

I'm pretty sure you just ran into the "Link-time Code Generation" feature of VS2012. As the name suggests, code generation is done during linking the whole program, not while compiling each source file.

 

This is done to be able to optimize across object file boundaries, which MS calls "Whole Program Optimization". Unfortunately, this considerably slows down builds.

 

Since it is an optimization technique, it should be turned off for debug builds. So to verify that this is in fact the problem, check if the debug build has the same problem. If not, it is probably the Link-time Code Generation.

 

To turn it off, right-click your project in Solution Explorer, and select "Properties". Then, go to "Configuration Properties", "Linker", "Optimization". Change the "Link Time Code Generation" property to "Default". Make sure that you do this for all the libraries in your solution!

 

That should speed up your build again, hopefully...



#5 BitMaster   Crossbones+   -  Reputation: 5483

Like
0Likes
Like

Posted 26 March 2013 - 07:47 AM

My experience with MSVC (and I admit I haven't done serious work in MSVC 2012 yet) is, that even if you switch off link time code generation but then link a static library which has link time code generation enabled, your whole program will be linked with link time code generation. To my knowledge there is no way around that without recompiling the library in question without LTCG.

#6 Endemoniada   Members   -  Reputation: 345

Like
0Likes
Like

Posted 26 March 2013 - 01:58 PM

Hi guys, the setv() function is simply prototyped in a .h file and defined in a .cpp file that are part of my project. Here it is:

 

 

// in numerical.h
void setv(vertex* dst,float x,float y,float z,float nx,float ny,float nz,DWORD clr);

// in numerical.cpp
void setv(vertex* dst,float x,float y,float z,float nx,float ny,float nz,DWORD clr)
{
 dst->x=x;
 dst->y=y;
 dst->z=z;

 dst->nx=nx;
 dst->ny=ny;
 dst->nz=nz;

 dst->u=0.0f;
 dst->v=0.0f;

 dst->clr=clr;
}

 

I just tested it and you guys are right, it does not happen in debug. That's a relief because I thought something was messed up that I wouldn't be able to find. Thanks everyone.


Edited by Endemoniada, 26 March 2013 - 01:59 PM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS