정보기술 ·
64비트 날짜 변환 알고리즘 개발...기존 대비 최대 40% 성능 향상
벤 조프, 획기적 연산 최적화로 날짜 계산 속도 개선
[한국정보기술신문] 호주의 소프트웨어 개발자 벤 조프가 지난 23일 64비트 날짜 변환 알고리즘을 공개하며 컴퓨터 날짜 처리 성능의 새 지평을 열었다. 이번 알고리즘은 기존 최고 성능 알고리즘 대비 30~40%의 속도 향상을 달성했으며, 1조 8900억 년의 시간 범위를 정확하게 처리할 수 있다.
조프는 자신의 웹사이트를 통해 이 알고리즘의 전체 구현 코드를 BSL-1.0 라이선스로 공개했다. 해당 알고리즘은 C++ 언어로 작성되었으며 깃허브를 통해 누구나 사용할 수 있다.
날짜 변환 알고리즘은 컴퓨터가 특정 날짜를 계산하는 데 필수적인 기술이다. 특히 64비트 유닉스 타임스탬프를 처리할 수 있어 현대 컴퓨팅 환경에서 폭넓게 활용될 것으로 예상된다. 유닉스 타임스탬프는 1970년 1월 1일 0시를 기준으로 경과한 초를 나타내는 방식이다.
연산 횟수 대폭 감소로 속도 향상
이번 알고리즘의 핵심은 기존 방식에서 필요했던 7회 이상의 고비용 연산을 4회의 곱셈으로 줄인 것이다. 기존 알고리즘들은 2의 제곱수가 아닌 수로의 곱셈, 나눗셈, 모듈로 연산을 다수 수행해야 했다. 조프의 알고리즘은 이를 최소화해 CPU 사이클을 크게 절감했다.
벤치마크 테스트 결과에 따르면 인텔 x64 프로세서에서 C++ 부스트 라이브러리는 약 51사이클, 기존 최고 성능 알고리즘인 네리-슈나이더 방식은 40사이클이 소요됐다. 반면 조프의 새 알고리즘은 약 27사이클만 필요했다. 애플 M4 프로 프로세서에서는 네리-슈나이더 방식 대비 38.4% 빠른 성능을 보였다.
역방향 연도 계산이라는 혁신적 접근
조프는 이번 알고리즘에서 연도를 역방향으로 계산하는 독특한 방법을 채택했다. 기존의 모든 날짜 변환 알고리즘은 연도를 순방향으로 계산했다. 이 경우 윤년 규칙을 처리하기 위해 추가적인 보정 항이 필요했다.
그러나 역방향 계산을 사용하면 윤년과 세기 단위의 긴 해가 즉시 시작되도록 설정할 수 있다. 조프는 서기 2400년 2월 29일을 기준점으로 삼아 거꾸로 날짜를 계산하는 방식을 도입했다. 이를 통해 기존의 보정 항을 제거하고 연산을 병합할 수 있었다.
이 접근법은 타임라인을 뒤집는 것이지만 속도 저하 없이 구현된다. 모든 날짜 알고리즘이 기준점 조정을 수행하기 때문에 더하기 대신 빼기 부호를 사용하는 것만으로 충분하다.
플랫폼별 최적화 기술 적용
조프는 x64와 ARM 프로세서의 특성 차이를 고려한 플랫폼별 최적화도 구현했다. ARM 칩은 16비트를 초과하는 정수를 로드하는 데 더 오래 걸린다. 이를 해결하기 위해 특정 상수를 32로 나누어 16비트 이하로 만들었다.
x64 기반 컴퓨터에서는 조건부 시프트 방식을 사용해 성능을 개선했지만, 애플 M4 프로에서는 이 최적화가 병렬 처리를 방해하는 것으로 나타났다. 따라서 컴파일 시점에 플랫폼을 확인해 적절한 최적화를 선택하도록 설계되었다.
64비트 컴퓨터에서 곱셈 결과를 두 개의 인접한 레지스터에 저장하는 특성도 활용했다. 64비트 시프트는 단순히 첫 번째 레지스터를 사용하는 것이므로 추가 연산이 필요 없다. 이러한 저수준 최적화 기법들이 모여 전체 성능 향상을 이뤄냈다.
광범위한 정확도 범위 보장
이 알고리즘은 약 1조 3810억 일, 즉 약 3조 7800억 년의 범위에서 정확한 결과를 제공한다. 최대 날짜는 서기 1조 8905억 9930만 8000년 2월 29일이며, 최소 날짜는 기원전 1조 8905억 9930만 3900년 3월 1일이다.
64비트 유닉스 타임스탬프가 약 5850억 년의 범위를 다루는 데 비해, 이 알고리즘은 수조 년의 범위를 처리할 수 있어 충분히 넓은 범위를 제공한다. 조프는 깃허브에 전체 범위를 검증하는 테스트 케이스를 공개했다. 애플 M4 프로에서 전체 범위를 검증하는 데 약 한 달이 소요될 정도로 광범위한 테스트가 수행되었다.
32비트 시스템 지원 방안 제시
조프는 이 알고리즘이 64비트 전용이지만, 32비트 컴퓨터를 지원해야 하는 라이브러리 개발자를 위한 대안도 제시했다. 그는 이전 논문에서 발표한 32비트 알고리즘들을 이번 기술로 업데이트해 성능을 개선했다.
API가 약 10억 일의 제한된 범위만 지원해도 되는 경우, 플랫폼별로 최적화된 32비트 알고리즘을 사용할 수 있다. 전체 32비트 입력 범위를 처리해야 하는 경우에는 조프가 이전에 개발한 오버플로 안전 알고리즘을 사용할 수 있다.
오버플로 안전 알고리즘은 32비트 입력 범위 내에서 완전히 안전한 유일한 고속 32비트 날짜 알고리즘이다. 부스트보다 빠르며 네리-슈나이더와는 장치에 따라 속도가 다르다. 부스트와 네리-슈나이더는 32비트 입력 범위의 약 25%만 지원하는 것으로 알려졌다.
벤치마크 결과 공개
조프는 네리-슈나이더가 제공한 벤치마크 코드를 직접 포크해 성능을 측정했다. 인텔 코어 i3-7100 프로세서에서 네리-슈나이더 대비 43.7%의 속도 향상을 보였으며, 인텔 코어 i7-855OU에서는 39.9%의 개선이 확인되었다.
애플 M4 프로 프로세서에서는 38.4%의 성능 향상이 측정되었다. 조프는 일부 플랫폼에서 열 관리나 전력 최적화로 인해 왜곡된 결과가 나올 수 있다며, 안정적이고 일관된 결과를 생성하는 플랫폼의 데이터만 공개했다.
스냅드래곤 ARM64 기반 노트북에서는 약 60%의 속도 향상이 보고되었지만, 짧은 벤치마크 루프를 왜곡하는 열 또는 전력 관리 동작이 의심된다고 설명했다. 2016년과 2020년형 x86 기반 맥북 프로에서는 2~10%의 개선만 나타났는데, 이 역시 CPU의 배터리 또는 열 최적화 때문인 것으로 분석되었다.
오픈소스로 공개된 전체 코드
조프는 이번 알고리즘의 전체 구현 코드를 깃허브에 공개했다. BSL-1.0 라이선스로 배포되어 누구나 자유롭게 사용하고 수정할 수 있다. 알고리즘은 C++로 작성되었으며, 다양한 플랫폼에서 컴파일하고 실행할 수 있도록 구성되었다.
조프는 자신의 엑스 계정을 통해 추가적인 날짜 및 알고리즘 관련 기사를 게시할 예정이라고 밝혔다. 그는 이번 달 초 이전 논문에서도 줄리안 맵핑 기법을 소개한 바 있다. 이 기법은 100년 및 400년 윤년 규칙을 빠르고 효율적으로 처리하는 방법이다.
날짜 변환 알고리즘의 성능 개선은 데이터베이스 관리, 금융 거래 시스템, 로그 분석 도구 등 시간 데이터를 대량으로 처리하는 모든 분야에 영향을 미칠 것으로 전망된다. 특히 빅데이터 분석과 실시간 처리가 중요해지는 현대 컴퓨팅 환경에서 이러한 성능 향상은 상당한 가치를 지닌다.
한국정보기술신문 정보기술분과 전호재 기자 news@kitpa.org