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

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

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.

7 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

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.cAlex

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?
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.

example-ivdep.zip

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..

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"?

I asked back on engineering. I will give you an update as soon as I get an answer.Alex

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

Leave a Comment

Please sign in to add a comment. Not a member? Join today