Software Archive
Read-only legacy content
17061 Discussions

Parallel Studio 2011 always relinks project with /Qipo enabled

Roman
Beginner
410 Views
I have a console test project "Hello world" in Visual Studio 2010 with Intel Parallel Studio 2011 and Intel C++ Compiler enabled. In the default Release configuration, If I set IPO under "Configuration Properties" -> "C/C++" -> "Optimization [Intel C++]" -> "Interprocedural Optimization" to Multi-File (/Qipo), Visual Studio always does project linking if I press F5/F6 (run/compile), but there is no changes in project. If I change it to "Single-File (/Qip)", Visual Studio do not link project every time I press F6.
How to make Visual Studio do in right way - relink project if there is a change? I have a big project, that links for 5 minuts...
0 Kudos
3 Replies
Milind_Kulkarni__Int
New Contributor II
410 Views

Did you mean problem comes with VS 2010 or with earlier versions too?

Do you face problem with small projects also.. If you have problem with large project, then only, you can give this a try :-- (as large programs may behave non-optimally under /Qipo as given in doc). Though I am not very sure it can cause the large project to re-link always when F5 pressed, you can go through it:--

I would suggest to experiment with -ipoN option (try N being bigger or equal than 2) and see what you get.

======================== help excerpt ======================================================

IPO for Large Programs

In most cases, IPO generates a single object file for the link-time compilation. This behavior is not optimal for very large programs, perhaps even making it impossible to use -ipo (Linux* and Mac OS* X) or /Qipo (Windows*) on the application.

The compiler provides two methods to avoid this problem. The first method is an automatic size-based heuristic, which causes the compiler to generate multiple object files for large link-time compilations. The second method is to manually instruct the compiler to perform multi-object IPO.

Use the -ipoN (Linux and Mac OS X) or /QipoN (Windows) option and pass an integer value in the place of N.

Use the -ipo-separate (Linux and Mac OS X) or /Qipo-separate (Windows) option.

The number of true object files generated by the link-time compilation is invisible to the user unless either the -ipo-c or -ipo-S (Linux and Mac OS X) or /Qipo-c or /Qipo-S (Windows) option is used.

Regardless of the method used, it is best to use the compiler defaults first and examine the results. If the defaults do not provide the expected results then experiment with generating more object files.

You can use the -ipo-jobs (Linux and Mac OS X) or /Qipo-jobs (Windows) option to control the number of commands, or jobs, executed during parallel builds.

Using -ipoN or /QipoN to Create Multiple Object Files

If you specify -ipo0 (Linux and Mac OS X) or /Qipo0 (Windows), which is the same as not specifying a value, the compiler uses heuristics to determine whether to create one or more object files based on the expected size of the application. The compiler generates one object file for small applications, and two or more object files for large applications. If you specify any value greater than 0, the compiler generates that number of object files, unless the value you pass a value that exceeds the number of source files. In that case, the compiler creates one object file for each source file then stops generating object files.

The following example commands demonstrate how to use -ipo2 (Linux and Mac OS X) or /Qipo2 (Windows) to compile large programs.

Operating System Example Command

Linux and Mac OS X

icpc -ipo2 -c a.cpp b.cpp

Windows

icl /Qipo2 /c a.cpp b.cpp

Because the example command shown above, the compiler generates object files using an OS-dependent naming convention. On Linux and Mac OS X, the example command results in object files named ipo_out.o, ipo_out1.o, ipo_out2.o, and ipo_out3.o. On Windows, the file names follow the same convention; however, the file extensions will be .obj.

0 Kudos
Roman
Beginner
410 Views
Hi, Milind. The problem exists only in Visual Studio 2010, but with every project, even:
[cpp]#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}[/cpp]
The problem exists not only with the large project... I think it is some kind of integration error, as I can see in debug output of Visual Studio 2010 IDE (in dbgview), complier generates files like ipo_42285obj.obj on the first build, but requires an another (ipo_88833obj.obj for example) on next compile, MSBuild suggests to create new ipo_88833obj.obj because it does not exists and relinks the project.
I'll experiment with/Qipo and may be find some interesting information later...
-- update:
There is an example of Visual Studio debug output:
[bash][4652] Project 'D:TempIPOTestIPOTest.vcxproj' not up to date because 1 build outputs were missing. 
[4652]  up to date is missing: 'D:TEMPIPOTESTIPO_26205OBJ.OBJ' 
[/bash]
or something link that on every F6/F5.
/Qipo-jobs, /QipoN,/Qipo-S changes nothing...
0 Kudos
tcoles
Beginner
410 Views
Did you ever find a goodsolution to this?

I have the same problem with C++ Composer XE 2011. Disabling whole program optimization by setting \Qnoipo in the linker properties fixes it, but that obviously isn't very satisfactory because performance will be reduced.
0 Kudos
Reply