Steered response power phase transform(SRP-PHAT)은 음원 방향 추정을 위해 널리 사용되는 알고리즘이다. SRP-PHAT는 매우 많은 수의 후보 좌표를 조사해야만 하므로 기존 SRP-PHAT들은 실시간에 실행되지 못할 수도 있었다. 이 문제를 극복하기 위해, SRP-PHAT를 graphics processing units(GPUs) 기반으로 병렬화하는 시도가 있었다. 그러나, 그 방법들은 on-chip 메모리를 모두 쓰지 못하여 GPUs의 최대 연산 능력을 활용할 수 없었다. 이 발표에서 우리는 SRP-PHAT의 GPU 기반 병렬 알고리즘들을 주파수 영역과 시간 영역의 두 버전으로 제안한다. 제안된 알고리즘들은 SRP-PHAT의 메모리 접근 패턴을 최적화하고 on-chip 메모리를 공격적으로 사용한다. 결과적으로 제안된 방법들은 CPU 기반 알고리즘들에 비해 주파수 영역에서 1,276 배 그리고 시간 영역에서 80 배의 속도 향상을, 그리고 기존 GPU 기반 알고리즘들에 비해 주파수 영역에서 1.5 배 그리고 시간 영역에서 6 배의 속도 향상을 보였다.
[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습
GPU를 위한 병렬 음원 방향 추정 알고리즘
1. GPU를 위한 병렬 음원 방향 추정
알고리즘
이태우
고려대학교 음성정보처리연구실
twlee@speech.korea.ac.kr
2. Abstract
• Steered response power phase transform(SRP-PHAT)은 음원 방향 추정을
위해 널리 사용되는 알고리즘이다. SRP-PHAT는 매우 많은 수의 후보
좌표를 조사해야만 하므로 기존 SRP-PHAT들은 실시간에 실행되지 못할
수도 있었다. 이 문제를 극복하기 위해, SRP-PHAT를 graphics processing
units(GPUs) 기반으로 병렬화하는 시도가 있었다. 그러나, 그 방법들은
on-chip 메모리를 모두 쓰지 못하여 GPUs의 최대 연산 능력을 활용할 수
없었다. 이 발표에서 우리는 SRP-PHAT의 GPU 기반 병렬 알고리즘들을
주파수 영역과 시간 영역의 두 버전으로 제안한다. 제안된 알고리즘들은
SRP-PHAT의 메모리 접근 패턴을 최적화하고 on-chip 메모리를
공격적으로 사용한다. 결과적으로 제안된 방법들은 CPU 기반
알고리즘들에 비해 주파수 영역에서 1,276 배 그리고 시간 영역에서 80
배의 속도 향상을, 그리고 기존 GPU 기반 알고리즘들에 비해 주파수
영역에서 1.5 배 그리고 시간 영역에서 6 배의 속도 향상을 보였다.
3. 1. SRP-PHAT
• SRP-PHAT는 steered response power(SRP)가 최대인 지점의 방향을 음원이 있는 방향으로
추정한다. SRP가 최대인 지점 𝒒는 다음과 같이 얻어진다:
𝒒 = 𝒂𝒓𝒈 𝒎𝒂𝒙
𝒒∈𝑸
𝒑 𝒒
• 여기서 𝑸는 모든 후보 음원 좌표들의 집합, 𝒑 𝒒는 좌표 𝒒에서의 SRP 이다. 𝒑 𝒒는 주파수
영역(FD)과 시간 영역(TD)에서 계산될 수 있다.
• 주파수 영역:
𝒑 𝒒 =
𝑿 𝒎(𝝎)
𝑿 𝒎(𝝎)
𝒆𝒋𝝎𝝉[𝒒,𝒎]
𝑴
𝒎=𝟏
𝟐
𝟐𝝅
𝟎
𝒅𝝎
• 시간 영역:
𝒑 𝒒 = 𝑹 𝒒, 𝒎′, 𝒎″
𝑴
𝒎″=𝒎′+𝟏
𝑴−𝟏
𝒎′=𝟏
여기서, 𝑹 𝒒, 𝒎′, 𝒎″ =
𝟏
𝟐𝝅
𝑿 𝒎′ 𝝎 𝑿 𝒎″
∗
𝝎
𝑿 𝒎′ 𝝎 𝑿 𝒎″
∗ 𝝎
𝒆𝒋𝝎 𝝉 𝒒,𝒎′ −𝝉 𝒒,𝒎″
𝒅𝝎
𝟐𝝅
𝟎
파라미터 설명
𝑀 마이크로폰 수 (𝑚 = 1: 𝑀)
𝑋 𝑚 𝝎 𝑚번째 마이크로폰의 푸리에 변환
𝑋 𝑚
∗
𝝎 𝑚번째 마이크로폰의 푸리에 변환의 conjugate
𝜏[𝑞, 𝑚] 좌표 𝑞에서 마이크로폰 𝑚까지의 도착 시간 (TOA)
𝑅[𝑞, 𝑚′, 𝑚″] 좌표 𝑞에서 마이크로폰 쌍 (𝑚′, 𝑚″)의 phase transform (PHAT)
가중된 시간 영역 cross-correlation
4. 2. 병렬성 (Parallelism)
• 병렬성은 연산들 사이에 서로 의존성이 없어 동시에 계산될 수 있는 성질이다. 예를
들어 스레드 수준 병렬성(thread level parallelism, TLP)은 두 스레드 사이에 서로
의존성이 없어 동시에 계산될 수 있는 성질이다. 여기서 의존성이란 연산들 사이에
반드시 지켜야 할 실행 순서가 있음을 뜻한다. 이를테면 한 스레드 안에는 읽고
쓰기(write-after-read, WAR), 쓰고 쓰기(write-after-write, WAW), 쓰고 읽기(read-
after-write, RAW) 의존성이 있을 수 있다. 이 중에서, 오직 RAW만이 true 의존성으로
여겨진다.
• 그러나, 다수의 스레드에서는 RAW, WAW, WAR 모두 true 의존성으로 여겨진다. 단,
읽고 읽기 (read-after-read, RAR) 의존성은 메모리 broadcasting에 의해 풀릴 수 있다.
5. 3. Parallelism of FD SRP-PHAT
표 1에서 FD SRP-PHAT는 세 RAW 의존성을 갖는다:
줄 2,3 과 11 사이의 𝑋 𝑚, 줄 11 과 13 사이의 𝑠, 그리
고 줄 14 와 16 사이의 𝑝가 그것이다. 그러므로 FD
SRP-PHAT는 fast Fourier transform(FFT), SRP 계산,
그리고 최대 SRP 탐색의 세 블록들로 나눠진다. 줄
1~4의 FFT 블록은 최대 𝑀 × log 𝑇의 TLP를 갖는다.
줄 10~12의 가장 안쪽 loop는 병렬화 될 수 없다.
그 결과가 RAW 의존성을 유발하며 반드시 같은
변수 𝑠에 저장되어야 하기 때문이다. 유사하게, 줄
8~15의 SRP 계산 블록도 병렬화 될 수 없다. 그 결
과가 RAW 의존성을 유발하며 같은 변수 𝑝에 저장
되어야 하기 때문이다. 줄 6~20의 바깥 loop는 줄
16~19를 제외하고 𝑄 개 스레드들의 TLP를 갖는
다. 줄 14와 16의 RAW 의존성은 parallel reduction
으로 분리되어 처리될 수 있다.
표 1. FREQUENCY DOMAIN SRP-PHAT ALGORITHM
Input: 𝑥 𝑚 𝑡 , 𝜏 𝑞, 𝑚 , 𝜔 𝑘 , 𝑚 = 1:𝑀, 𝑡 = 1:𝑇, 𝑞 ∈ 𝑄, 𝑘 = 1:𝑇
1. for each microphone 𝑚
2. 𝑋 𝑚 ← FFT 𝑥 𝑚
3. 𝑋 𝑚 ← 1 𝑋 𝑚
4. end
5. 𝑝max ← −∞
6. for each location 𝑞
7. 𝑝 ← 0
8. for each frequency 𝑘
9. 𝑠 ← 0
10. for each microphone 𝑚
11. 𝑠 ← 𝑠 + 𝑋 𝑚 𝑘 ∙ exp 𝑗𝜔 𝑘 𝜏 𝑞, 𝑚
12. end
13. 𝑠 ← 𝑠2
14. 𝑝 ← 𝑝 + 𝑠
15. end
16. if 𝑝max < 𝑝
17. 𝑝max ← 𝑝
18. 𝑞 ← 𝑞
19. end
20. end
Output: 𝑞
6. 4. Parallelism of TD SRP-PHAT
표 2의 TD SRP-PHAT는 네 RAW 의존성을 갖는다: 줄 2,
3 과 7 사이의 𝑋 𝑚, 줄 7 과 11 사이의 𝑍 𝑛, 줄 11 과 17 사
이의 𝑅 𝑛, 그리고 줄 17 과 19 사이의 𝑝가 그것이다. 그
러므로 TD SRP-PHAT는 FFT, cross spectrum(CS) 계산,
inverse FFT(IFFT), SRP 계산, 그리고 최대 SRP 탐색의 다
섯 블록들로 나눠진다. FFT (줄 1~4) 와 IFFT (줄 10~12)
블록은 각각 𝑀 × log 𝑇 와 𝑁 × log 𝑇 스레드들의 TLP를
갖는다. 여기서 𝑁은 마이크로폰 쌍의 개수이다. 줄
6~8의 안쪽 loop 또한 TLP를 갖는다. 이는 각 요소의 계
산이 이전 loop의 결과들과 독립적이기 때문이다. 줄
5~9의 CS 계산 블록은 TLP를 갖는다. 이는 𝑋 𝑚을 공유
하는 스레드들 사이의 RAR 의존성은 메모리
broadcasting으로 풀릴 수 있기 때문이다. 줄 19~22를
제외하고 줄 14~23은 TLP를 갖는다. SRP 계산 (줄
16~18)은 병렬화될 수 없다. 왜냐하면 그 결과가 RAW
의존성을 유발하며 같은 변수 𝑝에 저장되어야 하기 때
문이다. 줄 19~22의 RAW 의존성은 parallel reduction으
로 분리되어 처리될 수 있다.
표 2. TIME DOMAIN SRP-PHAT ALGORITHM
Input: 𝑥 𝑚 𝑡 , 𝜏 𝑞, 𝑛 , 𝑚 = 1:𝑀, 𝑡 = 1:𝑇, 𝑞 ∈ 𝑄, 𝑛 ≡ 𝑚′, 𝑚″
1. for each microphone 𝑚
2. 𝑋 𝑚 ← FFT 𝑥 𝑚
3. 𝑋 𝑚 ← 1 𝑋 𝑚
4. end
5. for each microphone pair 𝑛 ≡ 𝑚′, 𝑚″
6. for each frequency 𝑘
7. 𝑍 𝑛 𝑘 ← 𝑋 𝑚′ 𝑘 𝑋 𝑚″
∗
𝑘
8. end
9. end
10. for each microphone pair 𝑛 ≡ 𝑚′, 𝑚″
11. 𝑅 𝑛 ← IFFT 𝑍 𝑛
12. end
13. 𝑝max ← −∞
14. for each location 𝑞
15. 𝑝 ← 0
16. for each microphone pair 𝑛 ≡ 𝑚′, 𝑚″
17. 𝑝 ← 𝑝 + 𝑅 𝑛 𝜏 𝑞, 𝑛
18. end
19. if 𝑝max < 𝑝
20. 𝑝max ← 𝑝
21. 𝑞 ← 𝑞
22. end
23. end
Output: 𝑞
7. 5. Parallel SRP-PHAT In FD (표 3)
Algorithm Thread index Number of threads Time complexity
Input: 𝑥 𝑚 𝑡 , 𝜏 𝑞, 𝑚 , 𝜔 𝑘 , 𝑚 = 1:𝑀, 𝑡 = 1:𝑇, 𝑞 ∈ 𝑄, 𝑘 = 1:𝑇
1. 𝑋 𝑚 ← FFT 𝑥 𝑚
2. 𝑋 𝑚 𝑘 ← 1 𝑋 𝑚 𝑘 FFT 𝑚, 𝑘 𝑀 × 𝑇 𝑂 𝑀 𝑇
𝐶
log 𝐶
3. load 𝜔 𝜅 into shared memory 𝜔 𝜅
4. load 𝑋1:𝑀 𝜅 into shared memory 𝑋1:𝑀 𝜅
5. synchronize all threads in a block
6. for each location 𝑞 in 𝜌
7. load 𝜏 𝑞, 1: 𝑀 into local memory 𝜏 𝑞 1: 𝑀
8. 𝑝 𝑞,𝜅 ← 0
9. for each frequency 𝑘 in 𝜅
10. 𝑠 ← 0
11. for each microphone 𝑚
12. 𝑠 ← 𝑠 + 𝑋 𝑚 𝑘 ⋅ exp 𝑗𝜔 𝑘 𝜏 𝑞 𝑚
13. end
14. 𝑝 𝑞,𝜅 ← 𝑝 𝑞,𝜅 + 𝑠2
15. end
16. end
SRP
𝜌, 𝜅
𝑄
𝜌
×
𝑇
𝜅
𝑂 𝑄
𝐶
𝑇𝑀
17. accumulate 𝑝 𝑞,𝜅 over 𝜅 into 𝑝 𝑞 SRP 𝑞 𝑄 𝑂 𝑄
𝐶
𝜅
18. find 𝑞 such that 𝑝 𝑞 is the maximum MPS 𝑞 𝑄 𝑂 𝑄
𝐶
log 𝐶
Output: 𝑞
8. 6. Parallel SRP-PHAT In TD (표 4)
Algorithm Thread index Number of threads Time complexity
Input: 𝑥 𝑚 𝑡 , 𝜏 𝑞, 𝑚 , 𝑚 = 1:𝑀, 𝑡 = 1:𝑇, 𝑘 = 1:𝑇
1. 𝑋 𝑚 ← FFT 𝑥 𝑚
2. 𝑋 𝑚 𝑘 ← 1 𝑋 𝑚 𝑘 FFT 𝑚, 𝑘 𝑀 × 𝑇 𝑂 𝑀 𝑇
𝐶
log 𝐶
3. load 𝑋1:𝑀 𝜅 into local memory 𝑋1:𝑀 𝑘
4. for each microphone pair 𝑛 ≡ 𝑚′, 𝑚″
5. for each frequency 𝑘 in 𝜅
6. 𝑍 𝑛 𝑘 ← 𝑋 𝑚′ 𝑘 𝑋 𝑚″
∗
𝑘
7. end
8. end
CS
𝜅
𝑇
𝜅
𝑂 𝑇
𝐶
𝑁
9. 𝑅 𝑛 ← IFFT 𝑍 𝑛 IFFT 𝑛, 𝑘 𝑁 × 𝑇 𝑂 𝑁 𝑇
𝐶
log 𝐶
10. load 𝑅 𝑛 into shared memory 𝑅 𝑛
11. synchronize all threads in a block
12. 𝑝 𝑞 ← 0
13. for each microphone pair 𝑛 ≡ 𝑚′, 𝑚″
14. 𝑝 𝑞 ← 𝑝 𝑞 + 𝑅 𝑛 𝜏 𝑞, 𝑛
end
SRP
𝑞 𝑄 𝑂( 𝑄
𝐶
𝑁)
16. find 𝑞 such that 𝑝 𝑞 is the maximum MPS 𝑞 𝑄 𝑂 𝑄
𝐶
log 𝐶
Output: 𝑞
9. 7. GPU performance & result
표 5. 실험 환경
Sound source
Corpus: TIMIT
Sampling rate: 16 KHz
Length: 104 seconds
Frame size (𝑇): 4096 samples
Overlap: 2048 samples
Room
Dimension: 3m×5m×3m
Reverberation: RT60 0.43 seconds
Search space ( 𝑄 ): 3888, 97200, 388800
Microphones Number of sensors (𝑀): 8, 16, 32
Host
CPU: i7-2700K 3.5 GHz
RAM: DDR3 PC3-10700 8 GB
Devices
GPU1: GTX 560 Ti, 900 MHz, 8 SMs, 384 cores
GPU2: GTX 580, 815 MHz, 16 SMs, 512 cores
GPU3: GTX 680, 1006 MHz, 8 SMs, 1536 cores
표 6. 마이크로폰 수 𝑀 변화에 따른 프레임 당 수행 시간 (MILLISECONDS)
( 𝑄 : 97200, DEVICE: GTX 680)
𝑀
Algorithm
8 16 32 Average Speedup
FD
CPU 110953 223072 453447 262490 1
Minotto 130.559 291.419 677.741 366.573 716
Proposed 53.3157 149.929 525.913 243.053 1080
TD
CPU 8.67241 45.7703 210.365 88.2691 1
Minotto 1.67966 3.21136 16.4630 7.11799 12
Proposed 0.35004 0.60906 1.88197 0.94702 93
Minotto, V., Jung, C., Silveira, L., Lee, B., 2012. GPU-based approaches for real-time sound source localization using the SRP-PHAT algorithm. Int. J. High Perform.
Comput. Appl., 27 (3), 291–306.
10. 8. GPU performance & result
표 7. 탐색 후보 좌표 수 𝑄 변화에 따른 프레임 당 수행 시간 (MILLISECONDS)
(𝑀: 16, DEVICE: GTX 680)
𝑄
Algorithm
3,888 97,200 388,800 Average Speedup
FD CPU 9339.01 223072 876644 369685 1
Minotto 8.85731 291.419 865.507 388.595 951
Proposed 6.09673 149.929 597.590 251.205 1472
TD CPU 27.1977 45.7703 103.277 58.7482 1
Minotto 0.89618 3.21136 8.00686 4.03814 15
Proposed 0.26006 0.60906 1.80190 0.89034 66
표 8. 디바이스 별 프레임 당 수행 시간 (MILLISECONDS)
Device
Algorithm
GTX 560 GTX 580 GTX 680 Average Speedup
FD Minotto 1690.07 658.103 865.507 1071.23 1
Proposed 814.772 516.804 597.590 643.055 1.7
TD Minotto 13.7382 8.07846 8.00686 9.94117 1
Proposed 2.20939 1.33607 1.80190 1.78245 5.6
11. 9. Conclusion
• 이 발표에서, 우리는 FD와 TD에서 GPU 기반 병렬 SRP-PHAT 알고리즘을 제안하였다.
제안된 알고리즘은 메모리 통신 병목을 최소화하도록 on-chip 메모리 사용을
최대화하여 높은 속도 향상을 얻었다.
• 제안된 방법들은 블록 당 스레드 수를 warp 크기의 배수로 설정할 수 있다. 이는
single instruction multiple data (SIMD) 연산들이 최대로 활용될 수 있도록 한다.
• 제안된 방법들은 shared 메모리와 register들을 가능한 많이 사용한다. 이는 global
메모리 접근 횟수를 줄일 뿐 아니라 전력 소모 또한 최소화한다.
• 표 3의 줄 18과 표 6의 줄 16의 parallel reduction은 두 단계로 구현된다. 먼저 global
메모리 접근 없이 한 SM에서 local maximum들을 찾고, 다음 그 local maximum들 중
global maximum을 찾는다.
• 메모리 접근 패턴의 벡터화, on-chip 메모리 사용 최대화, 그리고 불필요한 scheduling
overhead를 줄이기 위한 coarse grain 병렬성 사용은 기존 GPU 기반 SRP-PHAT
방법들에 비해 FD에서 1.5배 그리고 TD에서 6배의 속도 향상을 가져왔다.
• CPU와 GPU의 협력 연산 또는 multi-GPU에서의 연산이 추가로 연구될 수 있다.
12. 참고 자료
• Taewoo Lee, Sukmoon Chang, and Dongsuk Yook
"Parallel SRP-PHAT for GPUs"
Computer Speech and Language, vol. 35, pp. 1-13, Jan. 2016
(Demonstration)