2020.10.08

애플, 스위프트 언어에 ‘저수준 원자 연산’ 지원 

Paul Krill | InfoWorld
‘스위프트 아토믹(Swift Atomics)’은 시스템 개발자가 동기화 구조(synchronization constructs)를 스위프트 언어로 직접 구축할 수 있는 새 오픈소스 패키지다.  
 
ⓒStefan Berndtsson (CC BY 2.0)

애플이 1일(현지 시각) 동시 데이터 구조와 같은 동기화 구조를 스위프트 언어로 직접 구축할 수 있는 오픈소스 패키지 ‘스위프트 아토믹’을 공개했다. 

현재 아토믹 라이브러리는 기트허브에서 다운로드받아 사용할 수 있다. 이는 스위프트에서 직접 저수준 원자 연산을 사용할 수 있도록 한다. 원자 연산은 정수와 포인터 값을 포함한 다양한 스위프트 타입에서 활성화된다. 스위프트 API 설계 원칙에 부합하는 원자 연산용 API도 제공된다. 

한편 스위프트 표준 라이브러리 팀의 엔지니어 카로이 라렌티는 “기본 작업이 매우 낮은 수준의 추상화에서 작동한다”라며, “아토믹은 다른 저수준 동시성 구조보다 훨씬 더 정확하게 사용하기 어렵다”라고 각별한 주의를 당부했다. 

스위프트.org(swift.org)에서 게재한 원자 연산의 예시는 아래와 같다. 
 
import Atomics
import Dispatch


let counter = ManagedAtomic<Int>(0)

DispatchQueue.concurrentPerform(iterations: 10) { _ in
  for _ in 0 ..< 1_000_000 {
    counter.wrappingIncrement(by: 1, ordering: .relaxed)
  }
}
counter.load(ordering: .relaxed) // ⟹ 10_000_000

이어서 라렌티는 "해당 예시의 원자 연산이 스위프트 변수를 관리하는 독점 규칙을 따르지 않는다"라면서, "원자 연산은 그 값이 원자 연산을 통해서만 액세스되는 한 복수의 동시 실행 스레드에서 수행될 수 있다"라고 설명했다.

스위프트 아토믹은 C/C++ 스타일의 메모리 모델을 명시적으로 채택하고, (비공식적으로는) 일반 스위프트 코드가 원자 연산과 상호 운용되는 방식을 설명한 스위프트 에볼루션(Swift Evolution) 제안에 의해 활성화됐다. 새 패키지에 포함된 대부분의 API는 해당 에볼루션 제안의 이전 버전에서 파생됐다. 

스위프트 표준 라이브러리 팀은 향후 더 많은 원자 타입과 연산을 추가해 패키지를 완성하고, 현재 테스트 제품군을 개선해 정확성과 성능에 관한 가정을 검증할 계획이라고 밝혔다. 아토믹 포럼(Atomics Forum)을 통해 해당 기술에 관해 토론하거나 지원을 받을 수 있다. ciokr@idg.co.kr
 



2020.10.08

애플, 스위프트 언어에 ‘저수준 원자 연산’ 지원 

Paul Krill | InfoWorld
‘스위프트 아토믹(Swift Atomics)’은 시스템 개발자가 동기화 구조(synchronization constructs)를 스위프트 언어로 직접 구축할 수 있는 새 오픈소스 패키지다.  
 
ⓒStefan Berndtsson (CC BY 2.0)

애플이 1일(현지 시각) 동시 데이터 구조와 같은 동기화 구조를 스위프트 언어로 직접 구축할 수 있는 오픈소스 패키지 ‘스위프트 아토믹’을 공개했다. 

현재 아토믹 라이브러리는 기트허브에서 다운로드받아 사용할 수 있다. 이는 스위프트에서 직접 저수준 원자 연산을 사용할 수 있도록 한다. 원자 연산은 정수와 포인터 값을 포함한 다양한 스위프트 타입에서 활성화된다. 스위프트 API 설계 원칙에 부합하는 원자 연산용 API도 제공된다. 

한편 스위프트 표준 라이브러리 팀의 엔지니어 카로이 라렌티는 “기본 작업이 매우 낮은 수준의 추상화에서 작동한다”라며, “아토믹은 다른 저수준 동시성 구조보다 훨씬 더 정확하게 사용하기 어렵다”라고 각별한 주의를 당부했다. 

스위프트.org(swift.org)에서 게재한 원자 연산의 예시는 아래와 같다. 
 
import Atomics
import Dispatch


let counter = ManagedAtomic<Int>(0)

DispatchQueue.concurrentPerform(iterations: 10) { _ in
  for _ in 0 ..< 1_000_000 {
    counter.wrappingIncrement(by: 1, ordering: .relaxed)
  }
}
counter.load(ordering: .relaxed) // ⟹ 10_000_000

이어서 라렌티는 "해당 예시의 원자 연산이 스위프트 변수를 관리하는 독점 규칙을 따르지 않는다"라면서, "원자 연산은 그 값이 원자 연산을 통해서만 액세스되는 한 복수의 동시 실행 스레드에서 수행될 수 있다"라고 설명했다.

스위프트 아토믹은 C/C++ 스타일의 메모리 모델을 명시적으로 채택하고, (비공식적으로는) 일반 스위프트 코드가 원자 연산과 상호 운용되는 방식을 설명한 스위프트 에볼루션(Swift Evolution) 제안에 의해 활성화됐다. 새 패키지에 포함된 대부분의 API는 해당 에볼루션 제안의 이전 버전에서 파생됐다. 

스위프트 표준 라이브러리 팀은 향후 더 많은 원자 타입과 연산을 추가해 패키지를 완성하고, 현재 테스트 제품군을 개선해 정확성과 성능에 관한 가정을 검증할 계획이라고 밝혔다. 아토믹 포럼(Atomics Forum)을 통해 해당 기술에 관해 토론하거나 지원을 받을 수 있다. ciokr@idg.co.kr
 

X