[OpenMP] 이해가 않되는 스레드 흐름

#include "stdafx.h"
#include 
#include 

int _tmain(int argc, _TCHAR* argv[])
{
    int a = 1;
#pragma omp parallel
    {
#pragma omp sections firstprivate(a) lastprivate(a)
        {
#pragma omp section
            {
                Sleep(1000);
                printf("section 1: a 초기값 = %d\n", a);
                a = 2;
                printf("section 1: a 수정값 = %d\n", a);
            }
#pragma omp section
            {
                printf("section 2: a 초기값 = %d\n", a);
                a = 3;
                printf("section 2: a 수정값 = %d\n", a);
            }
        }
    }

    printf("a 최종값 = %d\n", a);

    return 0;
}

이 코드는 스레드를 2개 사용하고 있습니다. 즉 section 지시어를 통해 13~18번 코드를 실행하는 스레드 하나와 20~24번 코드를 실행하는 스레드 하나입니다. 10번 코드에서 lastprivate(a)라는 보조 지시어를 통해 2개의 스레드에서 연산한 결과 a가 복사됩니다. 14번 코드에 Sleep 함수를 호출함으로써 두개의 스레드 중 a에 2를 할당한 스레드가 가장 마지막에 끝나도록 했습니다. a에 2를 할당한 스레드가 마지막에 종료되니.. 이 2개의 스레드가 끝나면 a 값은 항상 2가 될거라 예상됩니다.

사용자 삽입 이미지
근데.. 보는 바와 같이 a의 최종값이 3이라고 합니다.. ㅡOㅡ;; 실행 흐름을 봐도 가장 먼저 a 수정값으로 3을 할당하고 다음 실행으로 a 수정값으로 2를 할당하는 순서입니다. 실행 순서는 예상과 같은데.. 결과는 반대입니다.. ㅡOㅡ;; 아직 OpenMP를 학습하는 단계인지라.. 이해가 떨어져서 그런 것인지.. 아니면 OpenMP의 BUG인지… 모를 일입니다.. 누구 아시는 분 코칭 부탁드립니다.

[GIS] 매쉬업 맵 솔루션의 좋은 사례

맵 매쉬업 서비스에 대한 좋은 사례(http://oakland.crimespotting.org)가 있어서 정리해 봅니다. 매쉬업 주제는 범죄 지도입니다. 범죄의 종류에 대한 분류 그리고 범죄의 위치 그리고 범죄가 발생한 시간대를 통해 분류하고 파악할 수 있습니다.

사용자 삽입 이미지
제가 이 매쉬업 서비스를 유심히 살펴보게 한 이유는.. 범죄의 발생 위치는 기본이고.. 범죄의 분류와 발생 시간을 사용자가 분류하고 파악하기 위해 이 솔루션에서 제시하고 있는 사용자 컨트롤들 때문입니다. 3가지 정도가 가장 눈에 띠었는데요. 하나 하나 살펴보면..

먼저 지도의 우측에 범죄의 종류에 한 범례가 있습니다. 범례의 항목 중에 하나에 마우스를 올려 놓으면 지도와 연계하여 마우스가 올라간 범죄 항목이 자연스럽게 하일라이팅됩니다.
 
사용자 삽입 이미지
그리고 범죄가 발생한 기간에 대해 분류하기 위한 컨트롤입니다. 기간의 범위를 지정하기 위해 시작과 끝을 지정할 수 있고 이렇게 정의한 기간을 전체로 드레그해서 설정할 수 있습니다. 또한 각 날짜에 대한 범죄 발생을 바차트로써 표현하고 있습니다..!!

사용자 삽입 이미지
끝으로 범죄가 발생한 시간의 범위를 지정하기 위한 컨트롤입니다. 시간의 범위를 여러 구간으로 지정할 수 있습니다.

사용자 삽입 이미지
 범례나 기간 설정 그리고 시간 설정등에 대한 기능을 사용자가 매우 효과적으로 사용할 수 있도록 분석해 반영해 놓은 매우 좋은 사례라고 생각합니다.

GIS에서 데이터와 분석이 매우 중요하지만.. 결국 이러한 데이터와 분석 기능에 대해서 사용자가 어떻게 활용할 것인가에 대한 승부는 소프트웨어이고.. 좀더 구체적으로 지정하면 소프트웨어에서 제공하는 사용자의 UI입니다.

사용자의 UI의 편의성과 기능성 그리고 직관성을 향상 시키는 것은 매우 중요하다는 점에서.. 그리고 GIS 개발자로써 다시 한번 마음속에 담아 봅니다.

Flash Builder 4.5 정식 시리얼 키 발급 받는 법

http://www.adobe.com/devnet-apps/flex/free/

플래시 빌더를 개발한 Adobe는 학생 또는 플래시 빌더에 관심을 가지는 일반인들에게 무료로 시리얼 키를 발급해 줍니다. 비록 프리미엄이 아닌 스텐다드 버전이지만 사용 기간에 구애받지 않고 마음껏 사용할 수 있다는 점에서 추천합니다. 시리얼 키가 메일로 도착하는 시간은 짧게는 3일에서 길게는 2주정도 소요됩니다.

[GIS] BlackPoint, 모바일 GIS 엔진, 블랙포인트의 GPS 연동 기능

안드로이드 기반의 GIS 엔진인 블랙포인트의 GPS 연동 기능입니다. 사무실에서 창가에 모바일 기기를 위치해 놓고 캡춰한 화면입니다.

아이폰이라면 기본적인 기기자체의 화면 캡춰 기능으로 외부에서 테스트해 볼 수 있겠지만.. 이 안드로이드는 USB로 붙여 놔야 화면 캡춰가 가능한 관계로 사무실 안에서 테스트 해봅니다.

사용자 삽입 이미지
투명한 초록색이 오차 범위를 나타냅니다. 그리고 노란색 조막만한 애가 GPS가 보내는 위치입니다. 배경 지도는 강남쪽 일부에 대한 건물과 도로 SHP 파일을 올려 놓은 것이구요.

사무실이라 그런지.. 오차가.. 위의 캡춰한 이미지를 기준으로 30m 정도나네요.. 이건 좀 예외적인건데.. 실내에서 아무리 창가라고 해도 상당한 오차가 납니다. 근데 실외로 나가도 이 정도 오차는 납니다. 휴대용 GPS 오차가 있을테고.. 지도 자체의 좌표변환 오차가 있을테고 말입니다.

무척 오래전에 GPS Logger를 구입해 볼까했던 적이 있었습니다. 그때는 스마트폰이 활성화 되기 이전인데.. 가격이 싸게는 몇만에서 십만원 정도 했더랬습니다. GPS Logger는 내가 그날 하루 움직인 경로에 대한 좌표를 단순히 기록만 해주는 장치인데.. 이 기록을 USB에 연결해 파일로 받아 볼 수 있는 매우 단순한 기기입니다. 뭐…. 시간이 흘러서.. 이런 GPS Logger는 이제 돈주고 살필요가 없겠군요. 언제 기회가 닿으면 블랙포인트 솔루션으로 이 GPS Logger를 만들어 봐야겠습니다..