[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 개발자로써 다시 한번 마음속에 담아 봅니다.