Hi all, I have vectorization problems and I really need your help. Here are the vectorization reports for each array notation in the code bellow: -Array Notation(1) : Vectorized -Array Notation(2) : Subscript too complex -Array Notation(3) : Existence of vector dependence -Array Notation(4) : Subscript too complex -Array Notatino(5) : Subscript too complex -Array Notation(6) : Existence of vector dependence I tried using "restrict" on the pointers(i.e. int* restric p_p_data_), but didn't work. Is there any problem I'm missing? Thanks in advance! [CPU Info] -Core2 Quad Q9400 [OS Info] -WinXP Pro SP3 [Compiler Info] -Composer XE 2011 Update7, Package ID:w_ccompxe_2011.7.258
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 y_data_;
std::vector x_data_;
std::vector 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_ = &x_data_.front();
p_y_data_ = &y_data_.front();
p_p_data_ = &processed_data_.front();
return;
}
void PreProcess() {
int x_size = 5000;
add_point_ = image_->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 < 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 < 4; x++) {
// Array Notation(5)
p_x_data_[0:x_size] += p_y_data_[x:x_size];
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_->df.block_width:x_size]);
return;
}




