- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi
I'm trying to build a heavily templated application for IA32 with the Intel C++ Compiler for Windows, version 12.1.5.344, running on 64-bit Windows 7. Unfortunately, however, the IA32-targetting icl.exe (and mcpcom.exe) seem to be 32-bit binary, and errors out after trying to allocate more than 4GB (which is obviously impossible for a 32-bit binary).
Is there a 64-bit version of the Intel C++ compiler available which is able to target IA32? It seems that currently only the reverse is supported, i.e. an IA32-binary which produces code for Intel64. Can I somehow convince Intel64/icl.exe to produce code for IA32?
I know that the linux version of the Intel C++ Compiler *does* support that kind of cross-compiling, but that doesn't help since I need to target Windows, not Linux? Unless there's a way to cross-compile on Linux for Windows, of course...
If there's no support for that kind of cross-compiling, are there any compiler flags which I might use to conserve memory, apart from disabling inlining? (My app absolutely depends on inlining for performance. There are a lot of functions which compile to a single SSE instruction). I'm already using /Qip-, which seems to help a bit, but maybe there are others...
best regards,
Florian Pflug
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I will defer the issue of using a 64-bit compiler to produce a 32-bit app to the Intel readers of this post. (This would not be an unreasonable request.)
I suspect that you have a
#include "SingleHeaderThatBringsInAllTemplates.h"
Consider fragmenting large templates into smaller functional units then including only the templates necessary for the current .cpp file.
Jim Dempsey
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
[SergeyK] That is correct. A regular Win32 application cannot allocate more than 2GB of memory. The best
allocation number that I was able to get is ~1.99GB with a MinGW C++ compiler.
A non-regular Win32 application that uses Address Windowing Extensions ( AWE / a technology from Microsoft )
could allocate greater than 2GB of memory.
Are these erros from Intel C++ compiler or from your application?
Best regards,
Sergey
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
HLW S. wrote:This is a big feature request. please file a ticket at Intel Premier Support (https://premier.intel.com/) as well. JenniferSo, @Intel: Please consider making 64-bit builds of your IA-32 targetting compilers available.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sergey Kostrov wrote:True, but irrelevant. This is not about arbitrary application, it's about one very specific application, namely the Intel C++ Compiler.
Even if that option could be used in a 32-bit VS project it does not resolve a problem of 2GB limitation for a regular 32-bit application on a 32-bit Windows platform that does not support AWE
Sergey Kostrov wrote:That is wrong. 'T' is not, and never was, a reserved word. It's a common name for template parameters, but there's nothing special about it.
Please take into account that 'T' is a reserved word and it is used in C++ templates. Thanks for the test-case and I'll try it.
I consider my question to be answered. What I hoped for doesn't seem to exists, and I've found a workaround.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
HLW S. wrote:. There was a declaration error and try this instead: . typedef struct tagUserT { __m128i m_Data; } UserT; const UserT AddUserData( UserT &a, UserT &b ); const UserT AddUserData( UserT &a, UserT &b ) { UserT ut; ut.m_Data = _mm_add_epi32( a.m_Data, b.m_Data ); return ( UserT )ut; } . I compiled it with MS C++ compiler of VS 2005.Yup, try this
struct T { __m128i data; }; T add(T a, T b) { const T result = { _mm_add_epi32(a.data, b.data) }; return result; }MSVC complains that T may not be passed by value, since it requires alignment of > 8 bytes (it requires 16-byte alignment to fullfill __m128i's alignment requirements). No other compiler I tried has the slightest problem with this.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sergey Kostrov wrote:Yup, if you pass by reference it works. The point is that it MSVC complains if you pass by value. Thanks for your tests, though.
const UserT AddUserData( UserT &a, UserT &b );
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page