[논문 리뷰] Fast exact summation using small and large superaccumulators
이 논문은 현대 64비트 프로세서에서 단순 합산 시간의 두 배 이내로, 이중 정밀도 부동소수점 수의 정확한 합을 계산하고 가장 가까운 부동소수점 값으로 반올림하는 데 빠른 정확한 합산 방법을 소개한다. 이 방법은 하이브리드 방식의 소형 및 대형 슈퍼액큐뮬레이터(고정소수점 정수로 고정밀도를 확보)를 사용하여 메모리 대역폭에 가까운 성능을 달성한다. 이는 순차적 및 병렬 정확한 합산을 효율적으로 수행하면서도 재현 가능성을 잃지 않게 한다.
I present two new methods for exactly summing a set of floating-point numbers, and then correctly rounding to the nearest floating-point number. Higher accuracy than simple summation (rounding after each addition) is important in many applications, such as finding the sample mean of data. Exact summation also guarantees identical results with parallel and serial implementations, since the exact sum is independent of order. The new methods use variations on the concept of a "superaccumulator" - a large fixed-point number that can exactly represent the sum of any reasonable number of floating-point values. One method uses a "small" superaccumulator with sixty-seven 64-bit chunks, each with 32-bit overlap with the next chunk, allowing carry propagation to be done infrequently. The small superaccumulator is used alone when summing a small number of terms. For big summations, a "large" superaccumulator is used as well. It consists of 4096 64-bit chunks, one for every possible combination of exponent bits and sign bit, plus counts of when each chunk needs to be transferred to the small superaccumulator. To add a term to the large superaccumulator, only a single chunk and its associated count need to be updated, which takes very few instructions if carefully implemented. On modern 64-bit processors, exactly summing a large array using this combination of large and small superaccumulators takes less than twice the time of simple, inexact, ordered summation, with a serial implementation. A parallel implementation using a small number of processor cores can be expected to perform exact summation of large arrays at a speed that reaches the limit imposed by memory bandwidth. Some common methods that attempt to improve accuracy without being exact may therefore be pointless, at least for large summations, since they are slower than computing the sum exactly.
연구 동기 및 목표
- 정밀도를 보장하고 가장 가까운 표현 가능한 값으로 반올림하는 빠른 정확한 부동소수점 수의 합산 방법을 개발하기 위해.
- 특히 큰 배열에 대해 성능 저하가 심한 기존 정확한 합산 기법의 성능 저하 문제를 해결하기 위해.
- 순차적 및 병렬 구현 모두에서 재현 가능하고 순서에 영향을 받지 않는 결과를 보장하기 위해.
- 소규모 문제에 대해 정확한 합산의 고정된 계산 오버헤드를 줄이기 위해.
- R에서 정확한 표본 평균 계산과 같은 고정밀도 통계 계산을 지원하기 위해.
제안 방법
- 67개의 겹치는 64비트 조각을 가진 '소형' 슈퍼액큐뮬레이터를 사용하며, 각 조각은 32비트 겹침을 가지므로 희귀한 캐리 전파를 허용한다.
- 가능한 부호 및 지수 비트 조합 각각에 대해 1개의 조각을 가진 '대형' 슈퍼액큐뮬레이터를 사용하며, 각 조각은 업데이트된 횟수를 추적한다.
- 각 항에 대해 오직 한 개의 조각과 그에 관련된 카운트만 수정하여 대상의 대상 조각을 업데이트함으로써 명령어 수를 최소화한다.
- 필요한 경우에만 대형 슈퍼액큐뮬레이터의 비영 조각을 소형 슈퍼액큐뮬레이터로 이전하여 오버헤드를 줄인다.
- 소형 슈퍼액큐뮬레이터를 작은 합에, 대형 슈퍼액큐뮬레이터를 큰 합에 사용하며, 병렬 처리에서 부분 결과를 효율적으로 통합한다.
- 정확한 합을 고정소수점 형식으로 정수 연산을 사용해 표현함으로써 누적 중 부동소수점 반올림 오류를 방지한다.
실험 결과
연구 질문
- RQ1현대 64비트 프로세서에서 메모리 대역폭에 가까운 속도로 정확한 합산을 수행할 수 있는가?
- RQ2하이브리드 슈퍼액큐뮬레이터 설계가 소형 배열에 대한 정확한 합산의 고정 비용을 줄일 수 있는가?
- RQ3지수별 추적 기능을 가진 대형 슈퍼액큐뮬레이터를 사용하면 정확한 합산의 병렬 처리가 효율적으로 가능해지는가?
- RQ4대규모 문제에 대해 정확한 합산 방법이 정확성과 성능 면에서 비정확하지만 빠른 방법보다 뛰어나게 성능을 낼 수 있는가?
- RQ5특히 병렬 환경에서 정확한 합산의 성능이 계산이 아닌 데이터 이동에 의해 제한되는가?
주요 결과
- 하이브리드 소형 및 대형 슈퍼액큐뮬레이터 방법은 현대 64비트 프로세서에서 단순 비정확한 합산 시간의 두 배 이내로 정확한 합산을 달성한다.
- 큰 배열에 대해 이 방법은 메모리 대역폭 한계에 도달함을 보여주며, 성능이 더 이상 CPU에 의해 제한되지 않고 자료 이동에 의해 제약을 받는다는 것을 시사한다.
- 4개의 코어를 사용할 경우, 인텔 Xeon E3-1230 v2에서 최대 메모리 대역폭 활용도를 달성할 수 있었으며, 이는 큰 데이터셋에 대해 최적 성능을 내기 위해 몇 개의 코어만 필요하다는 것을 의미한다.
- 매우 작은 합에 대해 소형 슈퍼액큐뮬레이터 방법은 고정 초기화 및 스캔 비용으로 인해 단순 합산보다 10~20배 느리다.
- 대형 슈퍼액큐뮬레이터 덕분에 효율적인 병렬 처리가 가능하다: 배열을 나누어 병렬로 부분합을 계산하면 순차적 실행과 동일한 결과를 얻을 수 있으며, 재현 가능성을 보장한다.
- 비정확하지만 더 빠른 합산 기법이 대규모 응용 프로그램에서는 불필요할 수 있음을 보여주며, 정확한 방법이 정확성과 효율성을 동시에 확보할 수 있음을 입증한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.