Używam zwartej struktury 2 niepodpisanych szortów wskazujących pozycję początkową i końcową.
Potrzebuję być w stanie szybko określić, czy istnieją jakieś obiekty Range
o długości (różnica od początku do końca) poza wartością progową.Wektoryzacja warunkowego użycia szortów
Będę miał ogromną liczbę obiektów, każdy z własną tablicą Range
, więc nie jest możliwe śledzenie, które obiekty Range
znajdują się powyżej progu na liście lub coś takiego. Ten kod będzie również uruchamiany bardzo często (wiele razy na sekundę dla każdej tablicy), więc musi być wydajny.
struct Range
{
unsigned short start;
unsigned short end;
}
będą zawsze mieć tablicę Range
wymiarach 2^n. Chociaż chciałbym przerwać, gdy tylko znajdę coś powyżej progu, jestem prawie pewny, że szybsze byłoby po prostu LUB wszystko razem i sprawdzić na końcu ... zakładając, że mogę wektoryzować pętlę. Chociaż gdybym mógł zrobić instrukcję if na kawałku wyników dla każdego wektora, byłoby to wspaniałe.
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;
}
Nic dziwnego, że auto-Vectorizer daje błąd 1202, ponieważ mój typ danych nie 32 lub 64 bitów szerokości. Naprawdę nie chcę podwoić mojego rozmiaru danych i sprawić, aby każde pole było niepodpisane. Zgaduję, że auto-vectorizer jest na to gotowy.
Czy istnieją instrukcje wektorowe, które obsługują zmienne 16-bitowe? Jeśli są, jak mogę ich użyć w C++ do wektoryzacji mojej pętli?
Czy trzeba przechowywać wartości klasy w tablicy? Dlaczego nie przechowywać ich w innej strukturze danych, która przyspieszyłaby wyszukiwanie? – loganfsmyth
_to nie jest możliwe śledzenie, które obiekty Range znajdują się powyżej progu na liście lub czymś_. Jeśli wszystko, co chcesz zrobić, to określić, czy masz zakresy, które łamią regułę, a następnie śledzić to. Nie musisz śledzić każdego obiektu, aby to zrobić. –
Jak często używasz 'końca'? Byłoby możliwe przejście do reprezentacji '(start, size)' zamiast '(start, end)'. Będziesz oczywiście musiał obliczyć 'koniec' za każdym razem, gdy jest on używany, ale jeśli względne użycie' końca' kontra 'rozmiaru' jest niskie, to może się to okazać wygraną ... – twalberg