Tôi đang sử dụng cấu trúc nhỏ gọn gồm 2 quần short không dấu cho biết vị trí bắt đầu và kết thúc.
Tôi cần để có thể nhanh chóng xác định xem có bất kỳ đối tượng Range
nào có độ dài (chênh lệch từ đầu đến cuối) vượt quá giá trị ngưỡng hay không.Vector hóa quần áo có liên quan có điều kiện
Tôi sẽ có một số lượng lớn các đối tượng với từng mảng Range
của riêng mình, do đó, không thể theo dõi được đối tượng nào trong số đó là một đối tượng trong danh sách hoặc thứ gì đó. Mã này cũng sẽ được chạy rất thường xuyên (nhiều lần một giây cho mỗi mảng), do đó, nó cần phải được hiệu quả.
struct Range
{
unsigned short start;
unsigned short end;
}
Tôi sẽ luôn có một mảng Range
có kích thước 2^n. Trong khi tôi muốn hủy bỏ ngay sau khi tôi tìm thấy một cái gì đó trên ngưỡng, tôi khá chắc chắn nó sẽ được nhanh hơn chỉ đơn giản là HOẶC tất cả cùng nhau và kiểm tra ở cuối ... giả sử tôi có thể vectorize vòng lặp. Mặc dù nếu tôi có thể làm một tuyên bố if trên đoạn kết quả cho mỗi véc tơ, đó sẽ là lớn.
size_t rangecount = 1 << resolution;
Range* ranges = new Range[rangecount];
...
bool result = false;
for (size_t i = 0; i < ranges; ++i)
{
result |= (range[i].end - range[i].start) > 4;
}
Không ngạc nhiên, trình tự động vector cung cấp lỗi 1202 vì loại dữ liệu của tôi không rộng 32 hoặc 64 bit. Tôi thực sự không muốn tăng gấp đôi kích thước dữ liệu của tôi và làm cho mỗi trường một int không dấu. Vì vậy, tôi đoán cách tiếp cận tự động-vectorizer là ra cho điều này.
Có hướng dẫn véc tơ nào có thể xử lý biến 16 bit không? Nếu có, làm thế nào tôi có thể sử dụng chúng trong c + + để vectorize vòng lặp của tôi?
Bạn có cần để lưu trữ các giá trị phạm vi trong một mảng? Tại sao không lưu trữ chúng trong một cấu trúc dữ liệu khác mà sẽ làm cho tra cứu này nhanh hơn? – loganfsmyth
_so nó không phải là khả thi để theo dõi các đối tượng phạm vi là trên ngưỡng trong một danh sách hoặc something_. Nếu tất cả những gì bạn muốn làm là xác định xem bạn có phạm vi nào phá vỡ quy tắc hay không, hãy theo dõi điều đó. Bạn không phải theo dõi mọi đối tượng để làm điều đó. –
Tần suất bạn sử dụng 'kết thúc'? Có thể chuyển sang biểu diễn '(bắt đầu, kích thước)' thay vì '(bắt đầu, kết thúc)' hay không. Tất nhiên, bạn sẽ cần tính toán 'kết thúc' mỗi khi nó được sử dụng, nhưng nếu việc sử dụng tương đối' cuối' so với 'kích thước' thấp, điều đó vẫn có thể kết thúc là một chiến thắng ... – twalberg