분류 전체보기 290

Android App 구조

QCAR은 안드로이드를 기반으로 돌아가기 때문에, 안드로이드 공부를 하지 않을 수 없다. JAVA는 그렇다치고 JNI, NDK, Android, Unity 3D, OpenCV를 공부해야한다. QCAR Multitargets의 프로젝트 폴더구조다 src : 현재 개발중인 안드로이드 소스 코드 gen : 안드로이드가 자동적으로 생성한 R.java 소스 코드 libs : 라이브러리 폴더, NDK로 JNI소스를 돌리면 자동적으로 생성된다. jni : 자바 네이이티브 파일들, C, C++, Header파일이 들어있다. 이걸 NDK-build하면 .so라이브러리가 생성된다. res : 안드로이드가 자동으로 생성하는 자원 폴더 - drawable : 이미지파일 객체생성을 위한 실제 jpg와 같은 이미지나 이미지 생성..

Qualcomm AR SDK - QCAR

2011.8.16일 작성된 내용입니다. 이 점 유의해 주시기 바랍니다. - 현재 Qualcomm AR SDK는 Vuforia로 명칭이 변경되었습니다. - 이렇게 변경 된 후에는 프로그래밍을 해보지 못해 자세한 정보 전달해 드릴 수 없는 점 글을 읽으실 때 참고 하시기 바랍니다. - 아래 작성된 포스팅은 QCAR에 대한 내용입니다. QCAR SDK : Qualcomm Augmented Reality SDK 개발환경부터 만들자 깔아야할게 한두가지가 아니다 우선 한번 보자 JDK Eclipse IDE Android SDK Downloader Android ADT Android SDK platform support Cygwin Environment Android NDK 이렇게 일곱가지를 설치해야한다. 과정도 그..

ASE Vertex 추가

텍스쳐가 제대로 나오지 않았던 이유는 버텍스 하나에 UV를 여러개 매핑했기 때문이었다. 1. ASE파일의 이해 먼저 규칙을 정해야 합니다... 하나의 점은 하나의 UV좌표를 가진다는 조건입니다. 그럼 점의 수보다 UV수가 많을꺼에요.. 다시 말해서 UV수 만큼 점의 수를 늘려야 겠죠.. 방법은 "TFaces"를 보면 알꺼에여.. UV을 사용한 면의 구성입니다. "FACE_LIST"부분은 점의 면의 구성이죠.. 그럼 이 두가지를 잘 보시면 감이 오실겁니다 자 예를 들어 볼게요 *MESH_VERTEX_LIST { *MESH_VERTEX 0 -22.7053 20.2651 1.4493 *MESH_VERTEX 1 25.6039 20.2651 1.4493 *MESH_VERTEX 2 -22.7053 20.2651 5..

Graphics/3D MAX 2014.06.09

ASE 파일 (ASCII Scene Export)

내가 3D MAX까지 하게될줄은 꿈에도 생각 못했다. 럭셔리한집이네요 그래서 이걸 ASE파일로 저장했다 왜 ASE로 하냐면, 텍스트형태로 저장된 3D 파일이다. 그래서 이걸 가지구 OpenGL ES에서 읽어서 사용할 예정입니다. *3DSMAX_ASCIIEXPORT 200 *COMMENT "AsciiExport 버전 2.00 - Sun Sep 11 15:42:21 2011" *SCENE { *SCENE_FILENAME "house.max" *SCENE_FIRSTFRAME 0 *SCENE_LASTFRAME 100 *SCENE_FRAMESPEED 30 *SCENE_TICKSPERFRAME 160 *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000 *SCENE_AMBIENT_STA..

Graphics/3D MAX 2014.06.09

GPU 최적화 기초 - 결론

행렬과 벡터의 곱셈 프로그램으로 최적화 기법을 적어보았다 그리고 메모리 사용에 있어 다양한 경우에 효과적인 메모리 사용 방법을 선택할 수 있는 지표를 제시했다 메모리 읽기와 쓰기의 참조방식에 있어 프로그램의 유형은 아래와 같이 분류할 수 있다. - 다수의 트랜잭션으로 전역메모리 읽기, 쓰기를 하는 프로그램 * 메모리 접근이 빈번할 때에는 공유 메모리를 사용하여 읽기, 쓰기를 하는것이 좋다. * NVIDIA GPU Computing Development Kit의 'transposeNew' 프로그램 참고 - 소수의 트랜잭션으로 전역메모리 읽기, 쓰기를 하는 프로그램 * 공유 메모리를 사용하자, 그런데 전역메모리 참조횟수를 줄여 이득을 얻지 못하는 경우에는 이득을 얻지 못한다. - 소수의 트랜잭션으로 전역메모..

Graphics/GPU 2014.06.09

GPU 최적화 기초 - 분기문과 __syncthreads() 제거

알고리즘, 블록, 메모리, 분기문 중 분기문이다. 행렬과 벡터의 곱셈 후 블록 크기의 공유 메모리에 저장되어 있는 값을 합하는 과정에서 각각의 스레드 인덱스를 제어하여 필요한 값만을 합할 수 있다. 하지만, if문을 이용해 스레드를 제어하는 것 보다는 사용하게 되지 않는 값의 합까지 동일하게 병렬적으로 계산하도록 함으로 성능이 더 향상되어 if문을 제거하였다. 하프워프 단위 이하 스레드 공유메모리 접근시 읽기 및 쓰기 충돌로 인한 오류값이 발생하지 때문에, 동기화를 위한 __syncthreads() 함수 호출은 필요없다 그래서 알고리즘, 블록, 메모리, 분기문 최적화를 통해 무려 56배나 빨라진 계산속도를 볼 수 있다. 최적화된 행렬 곱셈 - 알고리즘, 블록, 메모리, 분기문 최적화 ThreadID = ..

Graphics/GPU 2014.06.09

GPU 최적화 기초 - 활성 블록 최적화, 메모리 최적화

행렬 M * 벡터 V = 결과 W 의 최적화 알고리즘, 블록, 메모리, 분기문 중 알고리즘 파트 봤고 이번에는 블록과 메모리 최적화 부분이다. 블록 최적화 스레드 블록 크기 : 블록 당 최대 스레드 수, 그리드 크기 : SM의 수 X 2 (60) 스레드는 그렇다치는데 그리드는 SM의 수 X 2가 왜 최적화일까? - 활성화 비율을 고려하여 SM당 2개의 블록이 할당되도록 한다. - 여러개의 블록이 할당 될 경우 뱅크충돌이 일어나구 그러면 성능에 악영향을 미친다 메모리 최적화 초기방법 : 커널의 입력데이터 행렬 M과 벡터 V의 인수저장에는 전역메모리 사용 개선방법 : 행렬 M의 행은 변하지만 곱해지는 벡터 V는 계속 같은 내용이 호출되기 때문에 전역메모리보다 빠른 텍스쳐 메모리에 벡터 V를 저장하여 성능향상..

Graphics/GPU 2014.06.09

GPU 최적화 기초 - 알고리즘 최적화

행렬과 벡터의 곱셈을 통해 최적화 기법의 영향을 분석해본다. 알고리즘, 블록 크기, 메모리, 분기문제거 요 네가지 부분으로 알아본다. 알고리즘 파트 행렬 M : NxN 벡터 V : Nx1 결과행렬 W : Nx1 곱하는 행렬의 행과 곱해지는 행렬의 열이 결과행렬이니까 이걸 가지고 최적화 한거랑 안한거랑 성능평가를 할 겁니다 기존의 알고리즘대로 하자면 그리드와 블록은 1차원 하나의 스레드는 결과 벡터 W의 복수의 항에 들어갈 값을 계산한다. 행렬 M의 블록 ID번째 행과 벡터 V의 벡터내적을 통하여 벡터 W의 블록 ID번째 항을 계산한다. - 그니까 행렬의 ID행과 벡터의 ID항을 곱해, 걍 행렬곱 스레드 크기보다 큰 행은, '행번호 / 스레드크기의 나머지'번째의 스레드가 계산을 한다. 최적화된 알고리즘대로..

Graphics/GPU 2014.06.09

GPU 최적화 기초 - 지연 감춤과 __syncthreads()

__syncthreads() : 각 스레드의 작업을 모두 동일하게 맞추어준다 - 때문에 지연 감춤의 효과를 떨어뜨린다. - 빠른속도의 공유 메모리를 사용한다고해서 반드시 유리하지만은 않다는 것을 의미한다. 공유메모리에 전역 메모리 일부를 읽어 데이터를 처리하는 방법을 많이 사용하지만, 공유메모리에 전역 메모리를 복사한 후 __syncthreads()를 사용할 경우 지연 감춤은 일어나지 않는다. 즉, 전역메모리 참조 횟수 대비 적당한 시간의 명령 수행시간이 확보되고, __syncthread()가 그 명령 수행시간 사이를 구분짓지 않는 경우, 지연감춤이 일어나는 전역 메모리만 사용하는 경우가 공유메모리를 함께 사용하는 것 보다 더 나을 수 있다. 결국은 메모리 매니지먼트가 그만큼 GPU 프로그래밍에서는 상당..

Graphics/GPU 2014.06.09