OpenCL 라이브러리 활용
위키백과의 OpenCL 문서(https://ko.wikipedia.org/wiki/OpenCL)를 참고 해 보면, API 등 C언어 기반인 것 같다.
C# 언어에서 사용할 수 있도록 다양한 제3자 라이브러리가 있는 것 같지만, 공부 할 겸 C언어 및 C++ 기반에서 DLL Library로 Export한 뒤에 C#에서 C언어 기반의 dll을 [dllimport]를 사용함으로써 로드하고자 한다.
내가 OpenGL, DirectX 같은 그래픽 라이브러리를 써본 적은 있는데, 직접 병렬 처리 라이브러리를 써 본적은 없어서 구현이 생각대로 될지 의문이다. 특히 단순 이미지 연산이 아니라, 안티에일리어싱, 글자 출력 등 일부 벡터 연산이 필요한 작업의 경우 수학적인 수식을 직접 연산 해 주어야 할 것으로 보이는데, 이 부분을 어떻게 해야할 지 고민이다. 하지만 속도가 제일 최강이니, 해 볼만 한 것 같긴 하다. 예를 들어,
for(int value=0;value<100000000;value++){
Memory[ value ] = Memory[ value ] + 10;
}
이러한 코드가 있을 때, CPU는 100000000번 넘게 돌아가면서 작업이 진행될 것이다. 특히 2D 이미지 작업을 위해 2중 for을 사용한다면, O(n) - > O(n^2)이 될 수도 있다.
그렇기 때문에, 이러한 그래픽 처리에서, OpenCL을 사용함으로써 병렬 작업을 진행하는 것 같다.