Hỏi về vòng lặp trong SIMD

Theo như em tìm hiểu thì vòng lặp có dữ liệu phụ thuộc thì không thể SIMD được.

for(i = 1; i <n 1; i++){
      A[i] += A[i - 1];
}

Nhưng nếu vòng lặp có giá trị kiểu như này thì có thể SIMD hóa được không ạ ?

for(i = 0; i<n-1 ; i++) {
      A[i] += A[i + 1];
}

Em cảm ơn.

1 Like

Hi Saitama.
Bạn định nghĩa thế nào là phụ thuộc ? Mình thấy hai cái như nhau.

1 Like

Nếu các tập lệnh SIMD không có cái nào ứng với trường hợp này thì chắc chắn là không rồi.

1 Like

@Phong_Ky_Vo
em tìm hiểu thì nó là giá trị cần phải được tính toán từ các lệnh trước , mà ở đây là vòng lặp trước đó. Còn cái dưới thì em hơi lăn tăn ko biết nó có đủ điều kiện để có thể vecto hóa vòng lặp hay ko :<<<<

@MeigyokuThmn
kiểm chứng điều đó như nào hả anh ?

1 Like

Bạn tìm các tài liệu của các nhà phát triển CPU như tài liệu x86 của Intel rồi tìm xem có hay không.
Mình e là không, có lẽ bạn sẽ phải cấu trúc lại cấu trúc dữ liệu của bạn để tận dụng SIMD.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?