병렬 처리 쓰레드로 정렬을 한다. 

정렬할 데이터가 많고 CPU 코어 갯수가 높을 수록 일반 sort보다 많이 빨라지게 된다.

parallel_while이나 다른 알고리즘에 비해 아주 간단하게 쓸 수 있다.. -ㅅ-...

 

여기서는 람다를 사용을 하고 있지만...

아직 C++0x가 적용 안된 컴파일러 (Windows의 경우 visual studio 2008 이하) 는 람다 함수를 사용 할 수가 없다.

람다 함수를 사용하는 대신에 functor를 이용 해야 한다.

 

 

[-] Collapse
#include <stdio.h>
#include <tchar.h>
#include <time.h>
#include <tbb/tbb.h>

#ifdef _DEBUG
#pragma  comment(lib, "tbb_debug.lib")
#else
#pragma  comment(lib, "tbb.lib")
#endif // _DEBUG

using namespace tbb ;

class CNObject
{
public:
    bool operator<(const CNObject & t) const
    {
        return  (data < t.data) ;
    }
public:
    int data ;
    char dumy ;
};

int _tmain(int argc, _TCHAR* argv[])
{
    task_scheduler_init init ;
    srand((unsigned int)time(NULL)) ;
    printf("병렬 처리 정렬 알고리즘\n") ;

    // 정렬을 테스트를 위한 데이터 생성
    CNObject aValue[10] ;
    for (int n = 0 ; n < 10 ; ++n )
    {
        aValue[n].data = rand() % 10 ;
        printf("%d ", aValue[n].data) ;
    }
    printf("\n") ;

    // 연산자 오버로딩을 이용한 연산
    parallel_sort(aValue, aValue + 10 ) ;

    for (int n = 0  ; n < 10 ; ++n )
    {
        printf("%d ", aValue[n].data) ;
    }
    printf("\n") ;

    // 이번엔 람다를 이용해서 정렬
    parallel_sort(aValue, aValue + 10,
        [](const CNObject &t1, const CNObject &t2)->bool
    {
        return (t1.data > t2.data);
    }) ;

    for (int n = 0  ; n < 10 ; ++n )
    {
        printf("%d ", aValue[n].data) ;
    }
    printf("\n") ;

    getchar() ;
    return 0;
}


'C++ > Intell C++' 카테고리의 다른 글

간단한 TBB parallel_for 예제  (0) 2014.09.16
간단한 TBB parallel_reduce 예제  (0) 2014.09.16
간단한 TBB parallel_while 예제  (0) 2014.09.16
간단한 TBB parallel_invoke 예제  (1) 2014.09.16

여러 루틴이 순서와 상관 없이 병렬로 실행되게 하고 싶을때 사용을 한다.

 

parallel_invoke 루틴은 반환할때는 모든 처리 루틴이 전부 동작되고 난 다음에야 리턴이 된다.

 

총 9개 까지 람다식 및 functor가 등록 될 수 있다.

 

 

[-] Collapse
#include <stdio.h>
#include <tchar.h>
#include <time.h>
#include <tbb/tbb.h>

#ifdef _DEBUG
#pragma  comment(lib, "tbb_debug.lib")
#else
#pragma  comment(lib, "tbb.lib")
#endif // _DEBUG

using namespace tbb ;



int _tmain(int argc, _TCHAR* argv[])
{
    task_scheduler_init init ;
    parallel_invoke(
        []() -> void
    {
        ::Sleep(1000);
        ::printf("finish : %d\n", 1000);
    },
        []() -> void
    {
        ::Sleep(10000);
        ::printf("finish : %d\n", 10000);
    }) ;

    printf("모든 작업 종료 \n") ;

    getchar() ;
    return 0;
}

'C++ > Intell C++' 카테고리의 다른 글

간단한 TBB parallel_for 예제  (0) 2014.09.16
간단한 TBB parallel_reduce 예제  (0) 2014.09.16
간단한 TBB parallel_while 예제  (0) 2014.09.16
간단한 TBB parallel_sort 예제  (0) 2014.09.16

리눅스 네트워크 프로그램을 개발하다가 보면 도메인 관련으로 해서  dns 서버를 변경을 해야 하는 

경우가 생깁니다. 

저 같은 경우는 gethostbyname_r 함수로 도메인으로 ip 주소를 가져 오는 경우가 많은데 

기존 kt dns서버를 사용을 했을때 딜레이가 걸리는 경우가 많이 생겨 dns를 변경하고 아주 

딜레이 없이 작동 되었습니다.

/etc/resolv.conf 


해당 파일을 수정하면 dns ip를 변경 할 수 있습니다.

nameserver 168.126.63.1

nameserver 168.126.63.2


윈도우는 주 dns, 보조 dns 두개를 설정 할 수 있는데에 비해서 리눅스는 5개까지 설정이 가능 하다고 합니다.

+ Recent posts