1. 서 론
플라즈마는 집합행동(Collective behavior)을 보이는 준중성(Quasi-neutrality)의 기체이다[1]. 기체가 이온화 되어 있다 하더라도 집합행동을 보이지 않으면 플라즈마라고 하지 않는다. 플라즈마의 집합행동은 외부의 전자기장뿐만 아니라 플라즈마 안의 양이온과 전자들이 만드는 국소적인 전자기장에도 영향을 받는다. 따라서 정적인 PIC(Particle-in-cell) 시뮬레이션 데이터에서 플라즈마의 집합행동을 예측하기 위해서는 플라즈마 내부의 전자기장을 관찰해 볼 필요가 있다.
기존에는 매트랩(Matlab) 이나 매스매티카(Mathmatica)를 통해 전기장을 계산한 뒤 계산된 전기장을 단순한 그래프나 3D Vector field를 통해 나타내는 방법을 이용하였다. 하지만 고 해상도 에이터에서 매트랩을 통해 렌더링된 벡터장은 직관적으로 그 형태나 세기를 관찰하는데 불편함이 있었다. 또한 계산에 CPU 만 활용하기 때문에 계산 속도 또한 매우 오래걸리는 문제점이 있었다. Fig. 1은 Matlab을 통해 3D Vector field를 렌더링 한 화면이다.
Fig. 1.Vector field rendered by Mathlab.
전하밀도 상의 한 점에서의 전기장을 구하기 위해서는 모든 점 전하에 대해 적분하고 이것을 모든 공간에 대하여 반복해야 한다. 이 연산은 O(N2) 의 시간 복잡도를 가지는 비용이 매우 큰 연산이다[2]. 또한 고차원 3차원 볼륨 데이터와 벡터장은 가시화 없이는 그 데이터의 의미를 얻기가 불가능하다. 본 논문에서는 먼저 플라즈마의 양이온과 전자의 밀도를 나타내는 데이터로부터 플라즈마 내부에 생성되는 전기장을 효율적으로 계산하는 방법을 논의하고 그 결과를 가시화 하는 방법을 다룬다.
2. 문제정의
임의의 위치에서의 전기장은 공간 안의 모든 점전하에 의해 생기는 전기장의 합과 같다. 시뮬레이션을 통해 얻어지는 볼륨 데이터의 해상도에 따라 전기장을 구하기 위한 계산량은 매우 커질 수 있다. 또한 계산된 벡터장이 의미 있는 정보가 되려면 많은 공간이 샘플링 되어야 한다. 이를 해결하기 위해 본 연구에서는 합성곱 정리와 GPGPU(General Purpose Graphic Processor Unit)를 이용한 병렬처리 방법을 제안한다. 또한 합성곱 정리를 이용하지 않고 계산한 결과와의 성능 비교도 수행하였다. 또한 플라즈마 전하 밀도, 합성곱 커널, 전위, 전기장 등, 4차원 이상의 데이터를 실시간으로 렌더링하고 직관적으로 관찰할 수 있는 방법에 대해 기술하였다.
연구에 사용된 데이터는 HDF5 포맷으로 저장되어있는 양이온과 전자의 밀도 데이터이다. 데이터는 241 × 401 × 401 크기의 3차원 그리드에 32bit 부동소수점 형식으로 저장되어 있다. Fig. 2는 전자와 양성자의 밀도 값이 그리드 형식으로 저장되어 있는 HDF파일을 HDFViewer를 통해 읽어온 화면이다. 이 데이터를 읽어오기 위해 HDF5 라이브러리를 사용하였으며 추가적으로 Raw 형식의 파일도 읽어올 수 있게 하였다. 렌더링 방식으로는 볼륨 렌더링, 서피스렌더링, 벡터장 렌더링을 지원하며 볼륨 데이터에 대해서는 볼륨 데이터를 그대로 보여주는 것뿐만 아니라 Isosurface를 구해 렌더링 하는 방식도 지원한다.
Fig. 2.Three Dimensional grid data of electric charge density.
3. 제안된 방법
전기장 는 전위(Electric potential) V에 대하여 다음과 같이 정의된다.
플라즈마를 입자의 집합으로 보면 플라즈마 내부의 전위는 점전하 군에 의해 생기는 전위이므로 쿨롱 포텐셜(Coulomb potential) 에 의해 다음 식으로 나타낼 수 있다.
여기서 은 위치 에서의 전하밀도함수, k 는 쿨롱상수 , 은 전위를 구하려는 위치, 은 점전하의 위치이다. 수식 (2)를 에 대한 합성곱(Convolution) 으로 볼 수 있으므로 수식 (2)는 다음과 같이 나타낼 수 있다.
합성곱 정리에 의해 수식 (3)을 푸리에 변환(Fourier transform)을 이용해 다음과 같이 쓸 수 있다.
위 식에서 F 는 푸리에 변환, F-1 은 역 푸리에 변환이다. 이렇게 계산된 전위에 대해 그라디언트를 취하면 전기장을 얻을 수 있다.
GPU (Graphic Processor Unit) 거대한 행렬이나 벡터를 다루는데 적합하게 설계되어 있다. 위 계산 과정에서 전하밀도를 구하는 과정과 푸리에 변환, 점별(Pointwise) 곱 연산은 GPGPU를 이용하여 가속할 수 있다. 본 연구에서는 CUDA C 와 CUDA Fast Fourier transform 라이브러리를 이용하여 위의 알고리즘을 가속화 하였다. CUDA 는 다수의 스레드(Thread)를 저렴한 비용으로 생성해 데이터 스트림을 CUDA 코어라 불리는 GPU 의 프로세서에서 병렬처리를 할 수 있게 해 준다[5,6].
4. 전기장 가시화
전기장을 구할 공간을 샘플링 하는 방법으로는 보간법을 이용하는 것이 일반적이다. 참조한 데이터가 많을수록 보간 된 데이터의 정확도가 올라간다. 하지만 보간에 필요한 연산량도 비례해서 증가하게 된다. 본 연구에서는 보간에 필요한 계산을 간소화하기 위해 1 로만 이루어진 커널과 전하 밀도 데이터의 합성곱을 이용해 전하 밀도의 구간별 평균을 구하고 그 결과를 전하 밀도 함수로 사용하여 “3. 제안된 방법”에서 서술한 방법으로 전기장을 계산하였다. 사용자가 샘플링 할 해상도를 조절할 수 있게 하여 가시화 될 전기장 벡터의 세밀한 정도를 조절할 수 있게 하였다.
Fig. 2 은 Y=40에서 플라즈마 전하밀도의 단면이다. 이 전하밀도와 Fig. 4의 커널을 각각 푸리에 변환을 한 뒤 곱하고 다시 역 푸리에 변환을 수행하면 Fig. 5의 전위가 구해진다. 이 데이터의 기울기를 취하면 구하고자 하는 전기장을 얻을 수 있다. 실제 연산에는 4차원(x, y, z, scalar, 예) 전하량, 커널, 전위)의 전체 데이터가 사용되었다.
벡터장을 가시화 하는 방법으로 벡터 표기법을 통한 방법을 고려하였다. GPGPU에서 연산된 벡터를 라인의 길이와 색상을 통해 크기를 표현하고 화살표로 방향을 표현했다. 렌더링에는 OpenGL을 이용하였으며 UI (User interface) 는 멀티플랫폼 사용 환경을 고려하여 QT 프래임워크를 사용하였다.
스칼라 데이터의 경우에는 스칼라 데이터의 크기에 따라 색상을 달리하여 텍스쳐 기반 볼륨 렌더링을 이용해 렌더링 하였다. 또한 Fig. 3, 4, 5와 같이 볼륨데이터의 한 평면에서의 스칼라 값을 높이 값으로 사용하여 3차원 공간에 렌더링 하는 방법도 사용하였다.
Fig. 3.Electric charge density of plasma.
Fig. 4.Kernel used by convolution operation.
Fig. 5.Calculated electric potential.
5. 성 능
5.1 시간 복잡도
일반적인 3차원 합성곱 연산의 시간 복잡도는 O(N2) 이다[1]. 합성곱 정리를 이용한 알고리즘에의 시간 복잡도는 푸리에 변환 알고리즘의 시간 복잡도와 같다. FFT(Fast Fourier Transform) 알고리즘의 시간 복잡도는 O(NlogN) 이다.
5.2 메모리 사용량
합성곱 정리를 이용한 합성곱 계산에서는 이산(discrete) 푸리에 변환의 주기성 때문에 출력 시그널에 의도치 않은 결과가 생길 수 있다. 이를 방지하기 위해서는 커널의 크기 만큼 시그널의 가장자리를 0으로 채워 주어야 한다. 즉 패딩이 추가된 이미지의 크기는 N = (Nfw + Ngw - 1) × (Nfh + Ngh - 1) × (Nfd + Ngd - 1) 이 된다. Nfw , Nfh , Nfd, Ngw , Ngh , Ngd 는 각각 이미지의 넓이, 높이, 깊이, 커널의 넓이, 높이 깊이 이다. 점별곱 연산을 위해선 커널의 크기도 이미지의 크기와 같아야 한다.
5.3 알고리즘 성능 비교
CPU에서 푸리에 변환을 이용하지 않고 합성곱을 계산한 결과와 GPU에서 푸리에 변환을 이용하여 계산한 결과의 수행시간을 비교하였다. CPU 메모리에서 GPU 메모리로의 데이터 복사에 소요되는 시간도 고려하였다. 실험이 수행된 환경은 Intel i7 920 CPU, 8GB DDR3 RAM, Nvidia GTX980 GPU 이다.
Table 1과 같이 데이터의 수가 적을 때는 CPU 수행시간이 더 빠를 수 있으나 데이터의 수가 늘어날수록 CPU 알고리즘의 수행시간이 기하급수적으로 늘어나는 것을 확인할 수 있었다. 그에 반해 본 연구에서 제안된 알고리즘의 경우 GPU 메모리로의 데이터 복사시간을 고려하더라도 비약적인 성능 향상을 확인할 수 있었다.
Table 1.Comparison of the performance for FFT algorithm and conventional convolution algorithm
6. 가시화
합성곱을 이용하면 샘플링의 정도를 적은 비용으로 조절할 수 있다. Fig. 6은 원본 데이터의 1/10 의 전하 밀도 값만 샘플링 하여 나타낸 전기장의 모습이다. 매트랩이나 매스매티카를 이용한 렌더링과는 달리 카메라의 구도나 샘플링 표본의 개수를 GUI를 통하여 쉽게 변경할 수 있다. 또한 고차원 데이터를 색, 차원 축소, 동위면 검출 등을 통하여 다향하게 분석할 수 있다. Fig. 7은 전자의 밀도를 색상과 불투명도 값으로 하여 텍스쳐 기반 볼륨 렌더링 된 모습이다. Fig. 8은 특정 편면에서 전하량의 변화를 관찰한 모습니다. Fig. 9은 Marching cubes 알고리즘을 이용하여 동위면 검출을 통해 전하량이 같은 부분만 렌더링 된 모습이다[7].
Fig. 6.Line representation of electric field.
Fig. 7.Visualization of electric charge density.
Fig. 8.Density variation on plane y=50.
Fig. 9.Surface construction using Marching cubes algorithm.
7. 결 론
본 연구에서는 대용량 플라즈마 전하 밀도 데이터를 입력 값으로 하여 원하는 해상도의 전기장 데이터를 GPGPU를 이용하여 고속으로 계산하고 그 결과를 가시화 하는 방법에 대해 논의하였다.
빅데이터에서 의미 있는 결과를 도출하기 위해서 가시화는 꼭 필요한 작업이다. 본 연구를 통해 대용량 플라즈마 데이터에서 전기장에 의해 플라즈마 입자에 가해지는 영향력을 시각적으로 분석하고 예측할 수 있게 되었다. 더 나아가서 정적인 데이터에 시간의 개념을 도입하여 플라즈마 입자들의 운동 방향을 예측해 볼 수 있는 기반을 마련하였다. 또한 GPGPU를 이용한 알고리즘의 병렬화를 통해 GPU의 코어 수 증가나 다중 GPU 환경에서 알고리즘의 수정 없이 성능향상을 도모할 수 있게 되었다.
향후에는 플라즈마 입자들의 모멘텀, 온도 등과 같은 플라즈마의 다른 속성들의 가시화를 통한 관찰방법과 작용되는 힘의 계산을 통해 운동방향을 예측하고 예상 운동 경로를 애니메이션화 할 수 있는 방법에 대해 연구할 예정이다. 또한 대용량 데이터에서의 실시간 동위면 검출을 통해 플라즈마 내부의 원하는 입자의 위치를 빠르게 검출할 수 있는 방법에 대해서도 연구할 예정이다.
참고문헌
- J.A. Bittencourt, Introduction, Fundamentals of Plasma Physics, Springer, New York, N.Y., 2014.
- K. Pavel and S. David, Algorithms for Efficient Computation of Convolution, Design and Architectures for Digital Signal Processing, InTech, Rijeka, Croatia, 2013.
- O. Rubel, C.G.R. Geddes, M. Chen, E.C. Michel, and E.W. Bethel, “Feature-based Analysis of Plasma-based Particle Acceleration Data,“ IEEE Transaction on Visualization and Computer Graphics, Vol. 20, No. 2, pp. 196-210. 2014. https://doi.org/10.1109/TVCG.2013.107
- M. Ikits, J. Kniss, A. Lefohn, and C. Hansen, Volume Rendering Techniques, GPU Gems, Addison-Wesley, Boston, MA, 2004.
- NVIDIA CUDA Zone, https://developer.nvidia.com/cuda-zone (accessed April 2015).
- NVIDIA CUDA Toolkit Documentation v7.0, http://docs.nvidia.com/cuda/index.html (accessed April 2015).
- W.E. Lorensen and H.E. Cline, “Marching Cubes: A High Resolution 3D Surface Construction Algorithm,” Computer Graphics on, Vol. 21, No. 4, pp. 163-169, 1987. https://doi.org/10.1145/37402.37422
- H. Shin, T. Yu, and K. Lee, “Visualization of Scattered Plasma-based Particle Acceleration Data” Journal of Korea Multimedia Society Vol. 18, No. 1, pp. 65-70, 2015. https://doi.org/10.9717/kmms.2015.18.1.065