Có một số thư viện cho điều này, trong một số trường hợp. Và, đáng chú ý, có những thủ thuật bạn có thể chơi với dữ liệu vectơ (ví dụ, bốn phần tử 32 bit trong vectơ 128 bit, nhưng điều này cũng áp dụng cho bốn byte 8 bit trong thanh ghi 32 bit) để đi nhanh hơn cá nhân truy cập -element.
Để chuyển vị trí, ý tưởng tiêu chuẩn là bạn sử dụng hướng dẫn "trộn", cho phép bạn tạo một vectơ dữ liệu mới trong số hai vectơ hiện có, theo thứ tự bất kỳ. Bạn làm việc với các khối 4x4 của mảng đầu vào. Vì vậy, bắt đầu, bạn có:
v0 = 1 2 3 4
v1 = 5 6 7 8
v2 = 9 A B C
v3 = D E F 0
Sau đó, bạn áp dụng hướng dẫn ngẫu nhiên vào hai vectơ đầu tiên (đan xen các yếu tố kỳ quặc của họ, A0B0 c0d0 -> ABCD, và đan xen thậm chí yếu tố của họ, 0A0B 0C0D -> ABCD) , và hai cuối cùng, để tạo ra một bộ mới của vectơ với mỗi khối 2x2 hoán:
1 5 3 7
2 6 4 8
9 D B F
A E C 0
cuối cùng, bạn áp dụng hướng dẫn ngẫu nhiên để cặp lẻ và cặp thậm chí (kết hợp cặp đầu tiên của các yếu tố, AB00 CD00 -> ABCD và các cặp cuối cùng của chúng, 00AB 00CD -> ABCD), để nhận được:
1 5 9 D
2 6 A E
3 7 B F
4 8 C 0
Và ở đó, 16 phần tử được chia thành tám hướng dẫn! Bây giờ, đối với các byte 8 bit trong thanh ghi 32 bit, ARM không có chỉ dẫn trộn chính xác, nhưng bạn có thể tổng hợp những gì bạn cần với ca và lệnh SEL (chọn) và tập hợp ngẫu nhiên thứ hai của bạn có thể làm trong một hướng dẫn với các lệnh PKHBT (gói nửa đầu dưới cùng) và hướng dẫn PKHTB (đóng nửa đầu từ trên).
Cuối cùng, nếu bạn đang sử dụng một bộ xử lý ARM lớn với véc tơ NEON, bạn có thể làm điều gì đó như thế này với vectơ 16 phần tử trên khối 16x16.
Có thể là bài tập về nhà không? ;-) – mjv
Đó không phải là sự chuyển đổi ma trận thông thường - các bản đồ chuyển tiếp '(hàng, col)' thành '(col, hàng)'. – caf
Nó wuold giúp một chút để kow những gì bạn đang nhúng nó không tốt. smoething với truy cập vào một GPU chỉ có thể sử dụng các hoạt động dot-sản phẩm của họ một cách dễ dàng, ví dụ. – Pod