ฉันกำลังพยายามแปลรหัส C/C++ นี้เป็นฟังก์ชัน SIMD Intrinsic
for(int i=0 ; i < length ; i++)
A[i] = B[C[i]];
ฉันสามารถแปลโค้ดด้านล่างได้ (C/C++)
for(int i=0 ; i < length ; i++)
A[i] = B[i];
ไปยังรหัส SIMD (โดยใช้ฟังก์ชัน Intrinsic)
for(int i=0 ; i < length-16 ; i+=16) {
uint8x16_t v0 = vld1q_u8(A+i);
vst1q_u8(A+i, v0);
}
ฉันรู้ว่าคำหลักนั้นแทรกเข้ามาเพื่อแก้ไขปัญหานี้ แต่ฉันหาวิธีแก้ปัญหาไม่ได้
ขอบคุณ.
แก้ไขFor more information
unsigned char A [32] = {0,}; // Output Array
unsigned char B [20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; // An array with values to pass to A Array
unsigned int C [32] = {19,15,11,10,5,3,6,4,5,19,10,14,16,14,8,9,10,20,11,1, 0, 3, 5, 19, 20, 11, 13, 9, 30, 31, 7}; // An array with the index information of the B array.
มีฟังก์ชัน Intrinsic ใดบ้างที่สามารถสร้างโค้ดต่อไปนี้ได้
int length = 32;
For (int i = 0; i < length-8; i+=8)
{
Uint8x8_t v_idx = vld1_u8 (C + i);
Uint8x8_t v = func (A, v_idx); // func (uint8_t, uint32x4_t)
vst1_u8(C+i, v);
}
จะส่งออก 20, 16, 12, 11, 6, 4, 7, 5, 6, 6, 20, 11, 15, 17, 15, 9, 10, 11, 21, 12, 2, 1, 4, 6, 20, 21, 12, 14, 10, 31, 32, 8
[หมายเหตุ]
A และ B เป็นประเภท uint8_t * เนื่องจากเป็นรูปภาพที่มีค่าระหว่าง 0 ถึง 255 และ C เป็นประเภท uint32_t * เนื่องจากได้รับการจัดทำดัชนีโดยดัชนี B
C
จะมีโครงสร้างเฉพาะ โดยทั่วไปมันเป็นการรวมกลุ่ม ฉันหวังว่าจะไม่ใช่C
คืออะไร? - person harold   schedule 04.06.2017C
เป็นอาร์เรย์ที่มีค่าดัชนีเป็นB
- person Byeongju Park   schedule 05.06.2017