/ / Mądra suma dwóch tablic liczb całkowitych o stałej długości - c, algorytm, sse

Elementowa suma dwóch ustalonych tablic długości liczb całkowitych - c, algorytm, sse

Powiedzmy, że mam dwie tablice o stałej długości z całkowitymi bez znaku.
Jak w mądry sposób sumować te tablice (w pierwszym) bez zapętlania lub z mniejszą liczbą pętli?

uint64_t foo [10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; uint64_t bar [10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; ... // funky kod bez pętli, dzięki czemu // foo jest teraz {0, 2, 4, 6, 8, 10, 12, 14, 16, 18}

Powiązane pytanie: czy można zsumować wiele liczb całkowitych uint64_t w jednej operacji?. (założę się, że można to zrobić za pomocą sse)

Pytanie w ogólności brzmi: jaki jest najszybszy sposób na zsumowanie dwóch tablic o stałej długości typu liczb całkowitych (umieszczonych w pierwszym)?

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz użyć _mm_add_epi64 aby dodać dwie 64-bitowe ints na iterację. Nie spodziewałbym się jednak radykalnej poprawy w stosunku do prostego kodu skalarnego. Jeśli nie chcesz wyraźnej pętli, możesz po prostu rozwinąć ją do 5 operacji.