Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.
7953 Discussions

ivdep-parallel and help-pragma not working on ICC v11.1

inthecrossfire
Beginner
745 Views
As far as I can tell, ICC v11.1 should support the parameter -ivdep-parallel to ignore loop dependencies for vectorisation. When I try and compile code using it I get:

$ icc -ivdep-parallel -o test test.c
icc: command line warning #10156: ignoring option '-i'; no argument required

Also, I tried to get a list of pragmas that the documentation suggests is available through help-pragma. With this I get:

$ icc -help-pragma
icc: command line error: no files specified; for help type "icc -help"

I'm building on CentOS 5 on a 64-bit machine. Have I just been reading the wrong documentation or am I missing something very obvious? Thanks.
0 Kudos
6 Replies
Alexander_W_Intel
745 Views
Hi,
you can always use the "pragma ivdep" to mark loop as independend.
The error with -help-pragma is a know issue. The workaround is to also specify a source file.
# icc -help-pragma test.c
Alex
0 Kudos
inthecrossfire
Beginner
745 Views
From the ICC man page, it sounds like you need to use -ivdep-parallel in conjunction with #pragma ivdep to get loop dependencies to be ignored. Here's a simple example that should be able vectorise.
[cpp]void addFour(int *array, int nx, int ny)
{
	int x,y,z;
	
#pragma ivdep
	for (z=0;z 
And it gives the following vec-report. Should the #pragma work in this case?
[bash]icc -O3 -vec-report3 -c -o ivdep.o ivdep.c
ivdep.c(7): (col. 2) remark: loop was not vectorized: not inner loop.
ivdep.c(9): (col. 3) remark: loop was not vectorized: not inner loop.
ivdep.c(11): (col. 4) remark: loop was not vectorized: existence of vector dependence.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed FLOW dependence between array line 13 and array line 13.
ivdep.c(13): (col. 5) remark: vector dependence: assumed ANTI dependence between array line 13 and array line 13.[/bash]
example-ivdep.zip
0 Kudos
Milind_Kulkarni__Int
New Contributor II
745 Views
As for the ivdep-parallel option, its an i64 only..

Applications for the IA-64 architecture

The -ivdep-parallel (Linux) or /Qivdep-parallel (Windows) option implies there is no loop-carried dependency in the loop where an ivdep pragma is specified. (This strategy is useful for sparse matrix applications.)

Are you using IA64 system..

Also, when I use the later compilers like 12.0/12.1, I get the inner loop as vectorized..

mkulka3@dpd20:~> icc -V

Intel C Intel 64 Compiler XE for applications running on Intel 64, Version 12.1.0.233 Build 20110811

Copyright (C) 1985-2011 Intel Corporation. All rights reserved.

mkulka3@dpd20:~> icc -O3 -vec-report3 -c ivdep.c

ivdep.c(11): (col. 4) remark: LOOP WAS VECTORIZED.

ivdep.c(9): (col. 3) remark: loop was not vectorized: not inner loop.

ivdep.c(7): (col. 2) remark: loop was not vectorized: not inner loop.

Perhaps, you could use compilers that are currently supported..

0 Kudos
levicki
Valued Contributor I
745 Views
help-pragma option still doesn't work in 2011 SP1 (Update 6), will this issue ever be fixed or will it stay forever as a "known issue"?
0 Kudos
Alexander_W_Intel
745 Views
I asked back on engineering. I will give you an update as soon as I get an answer.
Alex
0 Kudos
Alexander_W_Intel
745 Views

Hi,

This issue is fixed in the latest Studio XE 2016 Composer Edition product.  Please refer to this article for new product names.

Thanks,
Alex

0 Kudos
Reply