<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Cannot vectorize array notations in Software Archive</title>
    <link>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742117#M837</link>
    <description>Hi all,&lt;DIV&gt;I have vectorization problems and I really need your help.&lt;/DIV&gt;&lt;DIV&gt;Here are the vectorization reports for each array notation in the code bellow:&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(1) : Vectorized&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(2) : Subscript too complex&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(3) : Existence of vector dependence&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(4) : Subscript too complex&lt;/DIV&gt;&lt;DIV&gt; -Array Notatino(5) : Subscript too complex&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(6) : Existence of vector dependence&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;I tried using "restrict" on the pointers(i.e. int* restric p_p_data_), but didn't work.&lt;/DIV&gt;&lt;DIV&gt;Is there any problem I'm missing?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks in advance!&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;[CPU Info]&lt;/DIV&gt;&lt;DIV&gt; -Core2 Quad Q9400&lt;/DIV&gt;&lt;DIV&gt;[OS Info]&lt;/DIV&gt;&lt;DIV&gt; -WinXP Pro SP3&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;[Compiler Info]&lt;/DIV&gt;&lt;DIV&gt; -Composer XE 2011 Update7, Package ID:w_ccompxe_2011.7.258&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;[cpp]class SomeClass {
  SomeClass();
  ~SomeClass();
  void Init();
  void PreProcess();
  void Process();
  __declspec (vector) int GetDiff(int sub, int add) {
    return (add - sub);  
  };
  const byte* add_point_;
  const byte* subtract_point_;
  std::vector&lt;INT&gt; y_data_;
  std::vector&lt;INT&gt; x_data_;
  std::vector&lt;INT&gt; processed_data_;
  int* p_y_data_;
  int* p_x_data_;
  int* p_p_data_;
};

void Init() {
  x_data_.resize(5000);
  y_data_.resize(5000);
  processed_data_.resize(5000);
  p_x_data_ = &amp;amp;x_data_.front();
  p_y_data_ = &amp;amp;y_data_.front();
  p_p_data_ = &amp;amp;processed_data_.front();
  return;
}

void PreProcess() {
  int x_size = 5000;
  add_point_ = image_-&amp;gt;base_address();
  subtract_point_ = add_point_;
  // Array Notation(1)
  p_y_data_[0:x_size] = add_point_[0:x_size];
  for (int y = 0; y &amp;lt; 4; y++) {
    // Array Notation(2)
    p_y_data_[0:x_size] += add_point_[0:x_size];
  }
  return;
}

void Process() {
  int x_size = 5000;
  // Array Notation(3)
  p_y_data_[0:x_size] += GetDiff(subtract_point_[0:x_size], add_point_[0:x_size]);
  // Array Notation(4)
  p_x_data_[0:x_size] = p_y_data_[0:x_size];
  x_size--;
  for (int x = 1; x &amp;lt; 4; x++) {
    // Array Notation(5)
    p_x_data_[0:x_size] += p_y_data_&lt;X&gt;;
    x_size--;
  }
  x_size -= 4;
  // Array Notation(6)
  p_p_data_[0:x_size] = GetDiff(p_x_data_[0:x_size], p_x_data_[settings_-&amp;gt;df.block_width:x_size]);
  return;
}[/cpp] &lt;/X&gt;&lt;/INT&gt;&lt;/INT&gt;&lt;/INT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Fri, 22 Jun 2012 01:58:03 GMT</pubDate>
    <dc:creator>maeshiro_mi</dc:creator>
    <dc:date>2012-06-22T01:58:03Z</dc:date>
    <item>
      <title>Cannot vectorize array notations</title>
      <link>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742117#M837</link>
      <description>Hi all,&lt;DIV&gt;I have vectorization problems and I really need your help.&lt;/DIV&gt;&lt;DIV&gt;Here are the vectorization reports for each array notation in the code bellow:&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(1) : Vectorized&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(2) : Subscript too complex&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(3) : Existence of vector dependence&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(4) : Subscript too complex&lt;/DIV&gt;&lt;DIV&gt; -Array Notatino(5) : Subscript too complex&lt;/DIV&gt;&lt;DIV&gt; -Array Notation(6) : Existence of vector dependence&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;I tried using "restrict" on the pointers(i.e. int* restric p_p_data_), but didn't work.&lt;/DIV&gt;&lt;DIV&gt;Is there any problem I'm missing?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks in advance!&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;[CPU Info]&lt;/DIV&gt;&lt;DIV&gt; -Core2 Quad Q9400&lt;/DIV&gt;&lt;DIV&gt;[OS Info]&lt;/DIV&gt;&lt;DIV&gt; -WinXP Pro SP3&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;[Compiler Info]&lt;/DIV&gt;&lt;DIV&gt; -Composer XE 2011 Update7, Package ID:w_ccompxe_2011.7.258&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;[cpp]class SomeClass {
  SomeClass();
  ~SomeClass();
  void Init();
  void PreProcess();
  void Process();
  __declspec (vector) int GetDiff(int sub, int add) {
    return (add - sub);  
  };
  const byte* add_point_;
  const byte* subtract_point_;
  std::vector&lt;INT&gt; y_data_;
  std::vector&lt;INT&gt; x_data_;
  std::vector&lt;INT&gt; processed_data_;
  int* p_y_data_;
  int* p_x_data_;
  int* p_p_data_;
};

void Init() {
  x_data_.resize(5000);
  y_data_.resize(5000);
  processed_data_.resize(5000);
  p_x_data_ = &amp;amp;x_data_.front();
  p_y_data_ = &amp;amp;y_data_.front();
  p_p_data_ = &amp;amp;processed_data_.front();
  return;
}

void PreProcess() {
  int x_size = 5000;
  add_point_ = image_-&amp;gt;base_address();
  subtract_point_ = add_point_;
  // Array Notation(1)
  p_y_data_[0:x_size] = add_point_[0:x_size];
  for (int y = 0; y &amp;lt; 4; y++) {
    // Array Notation(2)
    p_y_data_[0:x_size] += add_point_[0:x_size];
  }
  return;
}

void Process() {
  int x_size = 5000;
  // Array Notation(3)
  p_y_data_[0:x_size] += GetDiff(subtract_point_[0:x_size], add_point_[0:x_size]);
  // Array Notation(4)
  p_x_data_[0:x_size] = p_y_data_[0:x_size];
  x_size--;
  for (int x = 1; x &amp;lt; 4; x++) {
    // Array Notation(5)
    p_x_data_[0:x_size] += p_y_data_&lt;X&gt;;
    x_size--;
  }
  x_size -= 4;
  // Array Notation(6)
  p_p_data_[0:x_size] = GetDiff(p_x_data_[0:x_size], p_x_data_[settings_-&amp;gt;df.block_width:x_size]);
  return;
}[/cpp] &lt;/X&gt;&lt;/INT&gt;&lt;/INT&gt;&lt;/INT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 22 Jun 2012 01:58:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742117#M837</guid>
      <dc:creator>maeshiro_mi</dc:creator>
      <dc:date>2012-06-22T01:58:03Z</dc:date>
    </item>
    <item>
      <title>Cannot vectorize array notations</title>
      <link>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742118#M838</link>
      <description>What compiler are you use?</description>
      <pubDate>Sun, 24 Jun 2012 17:53:17 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742118#M838</guid>
      <dc:creator>Maycon_Oliveira</dc:creator>
      <dc:date>2012-06-24T17:53:17Z</dc:date>
    </item>
    <item>
      <title>Cannot vectorize array notations</title>
      <link>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742119#M839</link>
      <description>Your compiler options would need to include -ansi-alias -restrict , and you have left your restrict out of your source code (restrict or __restrict may work, but not __restrict__ with the relatively old compiler). It's hard to guess what you have done; an actual example with your compile command would go a long way. If you are depending on the new gcc compatibility, that is an option for ICL 13.0.&lt;BR /&gt;</description>
      <pubDate>Sun, 24 Jun 2012 18:33:59 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742119#M839</guid>
      <dc:creator>TimP</dc:creator>
      <dc:date>2012-06-24T18:33:59Z</dc:date>
    </item>
    <item>
      <title>Cannot vectorize array notations</title>
      <link>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742120#M840</link>
      <description>Hi Maycon Oliveira!&lt;DIV&gt;Thank you for your reply.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;I'm using intel composer xe on Visual Studio 2005.&lt;/DIV&gt;</description>
      <pubDate>Mon, 25 Jun 2012 02:33:43 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742120#M840</guid>
      <dc:creator>maeshiro_mi</dc:creator>
      <dc:date>2012-06-25T02:33:43Z</dc:date>
    </item>
    <item>
      <title>Cannot vectorize array notations</title>
      <link>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742121#M841</link>
      <description>Hi Timp!&lt;DIV&gt;Thank you for your reply.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Vectocization worked with "Qansi-alias" compiler option.&lt;/DIV&gt;&lt;DIV&gt;But, I thought that the "restrict" qualifier and the "Qrestrict" compiler option were enough to remove the vector dependency of pointers.&lt;/DIV&gt;&lt;DIV&gt;Using "Qansi-alias" I have to worry about pointers aliasing on other part of the total source code...&lt;/DIV&gt;&lt;DIV&gt;I also tried "restrict" instead of "__restrict" but didn't work.&lt;/DIV&gt;&lt;DIV&gt;Maybe, "restict" shouldn't be used on members of a class?&lt;/DIV&gt;</description>
      <pubDate>Mon, 25 Jun 2012 02:44:35 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742121#M841</guid>
      <dc:creator>maeshiro_mi</dc:creator>
      <dc:date>2012-06-25T02:44:35Z</dc:date>
    </item>
    <item>
      <title>Cannot vectorize array notations</title>
      <link>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742122#M842</link>
      <description>ansi-alias is needed so as to assert that the (non-integer) data contained in a &lt;VECTOR&gt; doesn't alias with the book-keeping data. I suppose it would be particularly inadvisable to expect a compiler to accept code which violates the standard in such a case, but Windows applications do frequently have such expectations. &lt;BR /&gt;restrict would be used to assert non-aliasing among data regions defined separately outside the local scope and accessed by pointers (C style); by extension, it might apply to reference. As restrict still is not formally defined for C++, you are correct that it may not necessarily be meaningful in class context.&lt;/VECTOR&gt;</description>
      <pubDate>Wed, 27 Jun 2012 21:05:02 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742122#M842</guid>
      <dc:creator>TimP</dc:creator>
      <dc:date>2012-06-27T21:05:02Z</dc:date>
    </item>
    <item>
      <title>Cannot vectorize array notations</title>
      <link>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742123#M843</link>
      <description>Declaring restrict pointers inside my function worked and finally vectorization sucessed!&lt;DIV&gt;Thank you so much for your help!!!&lt;/DIV&gt;</description>
      <pubDate>Thu, 28 Jun 2012 01:13:21 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Cannot-vectorize-array-notations/m-p/742123#M843</guid>
      <dc:creator>maeshiro_mi</dc:creator>
      <dc:date>2012-06-28T01:13:21Z</dc:date>
    </item>
  </channel>
</rss>

