개인자료/프로그래밍
Rand() 함수를 이용한 1억개 SUM
2014.05.29Rand() 함수를 이용하여 1~9의 수를 생성하여 1억개 저장하여 SUM 구하기. LWS와 GWS에 따른 성능 측정을 하다가 LWS에서 자꾸 데이터 레이스가 발생했었습니다. 워크아이템 간에는 배리어가 적용되지 않아 발생한듯 합니다. 그래서 커널부분에서 Global -> Local로 바꿔주니 정상적으로 나왔습니다. 반대의 경우도 마찬가지였습니다. 다시 Global로 설정하니 위와 같은 성능을 보였습니다.
GWS, LWS 차이
2014.05.29GWS - Global Work Size LWS - Local Work Size 1. GWS(Global Work Size) 위부터 순서대로 16, 32, 64, 128, 256 Rand() 함수를 이용하여 1~9의 난수를 생성하여 1억개 저장하는 코드. GWS가 증가될수록 속도가 개선된다. 2. LWS(Local Work Size) 위와 동일하게 16,32,64,128,256 순서. 거의 차이가 없다. 이상한 점이 발견됐다. Size를 16과 32로 설정했을 때 Sum의 결과가 다르다. 499980762라는 값이 나와야하는데 데이터레이스가 발생한 듯 싶다. 원인을 찾아봐야겠다. 원인 : 커널에서 global size로 work item을 할당하고 있는데 work group 간의 배리어는 안먹힘.
[OpenCL] 혼합입자 시뮬레이션
2014.05.291. Sequential - CPU 2. Sequential - GPU 3. OpenCL - CPU 4. OpenCL - GPU
Dot Product
2014.05.291. Dot Proudct - Sequential 2. Dot Product - OpenCL OpenCL이 약 2.74배의 성능을 보입니다. ※ OpenCL 같은 경우 직접 구현해보니까 상당히 어려운 거 같습니다. 아직 제대로 이해하지 못한 상태라 사실 커널 부분이 제대로 적용됐는지도 좀 더 공부해봐야겠습니다.
HISTOGRAM
2014.05.29[OpenCL] PhotoMosaic
2014.05.291. 원본 2. Image_DB 5000장 3. Image_DB 10000장 5천장쯤 되니까 꽤 그럴싸하다.
[OpenCL] Photomosaic in MPI
2014.05.29flower는 원본-1000장-10000장 순이고 christmas는 원본-5000장입니다. 확실히 ImageDB가 많아질수록 모자이크 사진이 원본과 가까워진다는 것을 알 수 있습니다. 시간차이는 저번에 했던 MultiDevice와 별 차이 없는듯 합니다. 다만 위 그림처럼 조각을 더 잘게 나누어서 처리하여 더 디테일한 사진이 출력되었습니다.
[OpenCL] Photomosaic in Multidevice
2014.05.291. Sequential Code - 약 1839초 2. OpenCL Code(Single Device) - 약 15초 . 3. OpenCL Code(MultiDevice) - 약 8.7초 Sequential Code 기준 Single Device는 약 123배의 빠른 성능, Multi Device는 약 211배의 빠른 성능을 보였다. Multi Device 환경에서 Device 설정에 따라도 성능에 변화가 있었는데 DEFAULT로 설정시 Device가 1개로 설정되어 가장 느렸고 ALL로 설정시 Device 5개 -> CPU 1개, GPU 4개, 즉 CPU가 개입하여 계산되므로 더 느려짐. GPU로 설정시 GPU 4개만 사용하여 바로 위에 있는 사진처럼 가장 빠른 8.7초의 결과가 나왔다. 로컬메모리나..
[OpenCL] PhotoMosaic
2014.05.28이렇게 보면 위 사진과 아래 사진이 별 차이가 없어 보이지만 원본(약 13M정도)을 확대해보면 PhotoDB, 즉 적게는 한 장의 사진 많게는 수 만장의 사진이 DB로 축적된 파일 중 원본 사진의 RGB와 비교해 적용 알고리즘을 통한 계산법에 의해서 사진을 대체하게 된다. 1. 순차적인 코드(Sequential Code) 약 1839초가 걸린다. 2. OpenCL code 약 15초정도 걸린다. OpenCL코드가 순차적인 코드에 비해서 123배 빠른 성능을 보인다. 대단하군 Parallel.
Pthread QuickSort
2014.05.281. 일반 QuickSort / 0.00008sec 2. Pthread QuickSort [Thread 1개] / 0.0034sec 3. Pthread QuickSort [Thread 2개] / 0.00033sec 4. Pthread QuickSort [Thread 4개] / 0.00042sec 5. Pthread QuickSort [Thread 8개] / 0.00063sec 6. Pthread QuickSort [Thread 12개] / 0.00086sec
Semaphore single producer single consumer problem
2014.05.28Thread Affinity
2014.05.281. 다른 코어에 사용한 경우 [조건 1] SIZE = 1000000(100만) , ITER = 1000(1천) [조건 2] SIZE = 1000000(100만) , ITER = 10000(1만) 2. 동일 코어에 사용한 경우 [조건 1] SIZE = 1000000(100만) , ITER = 1000(1천) [조건 2] SIZE = 1000000(100만), ITER = 10000(1만) 두 변수를 다른 코어 또는 한 코어만 사용하도록 하여 시간을 측정했습니다. 첫번째 다른코어 P0과 P3을 사용한 경우 약 3.9초 & 약 39초가 걸렸고 두번째 같은코어 P0과 P6을 사용한 경우 약 4.4초 & 약 45초가 걸렸습니다. 동일 코어에 두 변수를 할당하여 사용할 경우 아무래도 캐시 메모리를 공유하다보니 번..