2009-11-27 4 views
2

C로 그래픽 라이브러리를 작성 중이며 일부 기능의 속도를 높이기 위해 SSE 명령어를 사용하고 싶습니다. 이 일을 어떻게 하죠? 컴파일러 내장 함수에 의존 할 수 있도록 GCC 컴파일러를 사용하고 있습니다. 또한 이미지 데이터를 저장하는 방식을 변경해야하는지 (현재 저는 플로트 배열을 사용하고 있습니다) 알고 싶습니다. float __attribute__ ((vector_size (16))) 배열을 사용해야합니까?SSE 명령어를 사용한 빠른 이미지 조작?

편집 : 나는에 관심이 이미지 조작의 종류/처리 아핀 변환, 기하, 및 주파수 도메인 필터링 (푸리에 분석)을 포함 나는 이미지 조작을 위해 SSE를 사용하는 방법에 대해 이동하는 방법에

언급이나 팁 C에서 많이 감사 할 것입니다.

감사

+0

라이브러리의 알고리즘이 무엇인지 설명해야합니다. 모든 것을 구형으로 변환 할 필요가 없습니다 ... char, short 및 int를 처리하는 많은 SSE 명령어가 있으며, 일부는 MPSADBW와 같은 일반적인 이미지 처리 단계로 특별히 설계되었습니다. 그리고 저수준 프로그래밍 작업과 약간의 속임수를 즐기십니까? 그렇지 않은 경우, SSE는 아마도 당신을위한 것이 아닙니다. – hirschhornsalz

+0

drhirsh, 내 라이브러리는 회전, 축척, 전단, 합성, 기하학 등과 같은 표준 기능을 지원합니다. 그래서 많은 매트릭스 작업이있을 것입니다. 또한 나는 주파수 도메인 이미지 프로세싱 (푸리에 변환 등)을 연구 중이다. 예 더 많은 어셈블리 레벨 프로그래밍에 관심이 많습니다. 과거에 약간의 작업을하고 즐겼습니다 :) SSE 및 이미지 조작/처리에 대한 자세한 내용을 보려면 여기를 클릭하십시오. :) – horseyguy

+1

@banister : http://stackoverflow.com/questions/1389712/getting-started-with-sse/1795196#1795196에서 게시 한 링크 중 일부는 일반적으로 SSE 학습에 유용합니다. 이미지 처리 경험이 없습니다. – int3

답변

2

나는의 Microsoft Visual C에 SSE 일부 이미지 처리 ++ 작업을했습니다. 모든 이미지 데이터 (Visual C++에서는 _aligned_malloc 및 _aligned_free로 완료)를 처음부터 정렬하는 것이 가장 쉽다는 것을 알게되었습니다. 정렬은 정말 고통스럽기 때문에 SSE를 산술 연산에만 사용하는 것입니다 (덧셈, 뺄셈, 점으로 된 제품, 그런 종류의 것들). 좀 더 복잡한 작업을해야한다면 일반적으로 포인터를 사용했습니다.

+0

답장을 보내 주셔서 감사합니다! :) 그러나 나는 그것에 대해 어떻게 갔는지 조금 더 많은 정보를 원합니다 :) SSE를 사용하는 이미지의 간단한 조작을 보여주는 예제 코드가 있습니까? 모든 팁이나 함정을 알고 있어야합니까? 인라인 asm이나 컴파일러 intrisics에 의존 했습니까? etc :) 감사합니다. – horseyguy

+1

좋습니다. 컴파일러 내장 함수를 사용했습니다. 확실한 함정이 없어도 모든 것이 정렬되어 있는지 확인하십시오. C++ 템플릿으로 모든 것을 만들었 기 때문에 예제 코드를 보여주기가 어렵 기 때문에 간단한 추가 작업을하더라도 많은 수준의 추상화가 있습니다. CodeProject.com에서 예제를 배웠습니다. 좋은 예제가 있는지 확인하십시오. –