[2023 01 24] 그래픽 프로그래밍 및 병렬 프로그래밍 준비 및 탐구 - Whitmem
[2023 01 24] 그래픽 프로그래밍 및 병렬 프로그래밍 준비 및 탐구
Graphic History
2023-01-24 05:53 게시 6dd824821be12a76fda7

0
0
91
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
그림을 그리거나 사운드를 에디팅하는 소프트웨어를 만들기 위해서 방대한 데이터를 자주 출력하고 로드하는 상황이 생겨나기 시작했다.

주로 C#을 사용하는데 C#에서 제공하는 그래픽 처리 클래스인 BufferedGraphics 에서 대량의 데이터를 관리하는데 무리가 있었고, 파형 데이터를 하나만 출력하더라도 버벅임 문제가 발생했다.
결국 찾아보니 여전히 다른 그래픽 라이브러리에 비해서는 하드웨어 사용을 안하는 것 같은 느낌이 들었고... 이 부분을 해결할 방법은 없을지 찾아보았다.
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을 사용함으로써 병렬 작업을 진행하는 것 같다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.