페이지

2020년 3월 30일 월요일

Intel MKL 사용하여 행렬곱 계산 속도 개선하기

Intel MKL 사용하여 행렬곱 계산 속도 개선하기

행렬곱을 계산할 때 Intel MKL을 사용하면 계산 속도가 얼마나 빨라지는지 알아보기 위하여 여러 가지 방법으로 실험을 해 보았습니다.

실험 환경

시스템

  • 프로세서: Intel Core i7-8550U CPU
  • 메모리: 16.0GB
  • 운영체제: Windows 10 (64-bit)
  • 전원 공급: AC adapter

라이브러리

  • Intel MKL 2019 Update 5
  • Eigen 3.3.7

컴파일러

  • MSVC++ Version 2019 (16.0)

소스 코드

완전한 소스 코드 중에서 설명을 위해 필요한 부분만 아래에 제시합니다.

방법-1. C 언어 3중 루프 사용

double *A, *B, *C;
int m, n, p, i, j, k;
double sum;

m = 2000, p = 200, n = 1000;
A = (double *)mkl_malloc( m*p*sizeof( double ), 64 );
B = (double *)mkl_malloc( p*n*sizeof( double ), 64 );
C = (double *)mkl_malloc( m*n*sizeof( double ), 64 );

for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++) {
        sum = 0.0;
        for (k = 0; k < p; k++)
            sum += A[p*i+k] * B[n*k+j];
        C[n*i+j] = sum;
    }
}

방법-2. Intel MKL dgemm 함수 사용 (1개의 쓰레드)

double *A, *B, *C;
int m, n, p;
double alpha, beta;
int thread_num;

m = 2000, p = 200, n = 1000;
alpha = 1.0; beta = 0.0;
thread_num = 1;
A = (double *)mkl_malloc( m*p*sizeof( double ), 64 );
B = (double *)mkl_malloc( p*n*sizeof( double ), 64 );
C = (double *)mkl_malloc( m*n*sizeof( double ), 64 );

mkl_set_num_threads(thread_num);
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 
    m, n, p, alpha, A, p, B, n, beta, C, n);

방법-3. Intel MKL dgemm 함수 사용 (4개의 쓰레드)

  • 방법-2의 소스 코드에서 thread_num 변수의 값을 아래와 같이 수정합니다.

    thread_num = 4;
    

방법-4. Eigen 라이브러리 사용

int m = 2000;
int p = 200;
int n = 1000;

MatrixXd A(m,p);
MatrixXd B(p,n);

MatrixXd C = A * B;

방법-5. Eigen 라이브러리 사용하고 백엔드로 Intel MKL 지정

  • 방법-4의 소스 코드를 사용하고 컴파일러 옵션으로 EIGEN_USE_MKL_ALL 매크로를 정의합니다.

방법-6. Eigen 라이브러리 사용하고 /arch:AVX 옵션으로 컴파일

  • 방법-4의 소스 코드를 사용하고 컴파일러 옵션으로 /arch:AVX 를 지정합니다.

방법-7. Eigen 라이브러리 사용하고 /openmp 옵션으로 컴파일

  • 방법-4의 소스 코드를 사용하고 컴파일러 옵션으로 /openmp 를 지정합니다.

방법-8. Eigen 라이브러리 사용하고 /openmp와 /arch:AVX옵션으로 컴파일

  • 방법-4의 소스 코드를 사용하고 컴파일러 옵션으로 /openmp/arch:AVX 를 지정합니다.

계산 속도

아래 표에서 경과 시간은 변수 초기화 과정을 포함하지 않습니다.

방법 설명 경과 시간 (milliseconds)
방법-1 3중 루프 1194.3
방법-2 cblas_dgemm API 15.1 (1 OpenMP intel thread)
7.6 (1 TBB thread)
방법-3 cblas_dgemm API, multi-threaded 8.5 (4 OpenMP intel threads)
8.4 (4 TBB threads)
방법-4 Eigen 2782.0
방법-5 Eigen + Intel MKL backend 35.0
방법-6 Eigen with /arch:AVX 1421.0
방법-7 Eigen with /openmp 722.0
방법-8 Eigen with /openmp & /arch:AVX 407.0

참고 자료

  • Eigen FAQ - How can I enable vectorization?

    You just need to tell your compiler to enable the corresponding instruction set, and Eigen will then detect it. If it is enabled by default, then you don’t need to do anything.

  • MSVC Compiler Options - /arch (x64)

    The /arch option enables the use of certain instruction set extensions, particularly for vector calculation, available in processors from Intel and AMD.

Written with StackEdit.

2020년 3월 29일 일요일

Wi-Fi 카드 2.4GHz로만 동작시키기

Wi-Fi 카드 2.4GHz로만 동작시키기

별도의 Wi-Fi AP 장치를 두지 않고 아래와 같은 기기들로만 Wi-Fi 네트워크를 구성하고자 할 때 주변 기기들이 2.4GHz만 지원하기 때문에 PC에서 실행하는 AP가 항상 2.4GHz를 사용하도록 Wi-Fi 카드를 설정해 주어야 합니다.

기기 Wi-Fi 카드 주파수 대역 Wi-Fi Direct 지원
PC (Windows 10) 2.4GHz, 5GHz O
주변 기기들 2.4GHz X

Wi-Fi 카드별 주파수 대역 선택 방법

  1. Windows 시작 메뉴에서 설정을 클릭합니다.
  2. Windows 설정 화면에서 네트워크 및 인터넷을 클릭합니다.
  3. 설정 화면의 왼쪽 메뉴바에서 Wi-Fi를 클릭합니다.
  4. 화면 오른쪽 관련 설정 구역에 있는 어댑터 옵션 변경을 클릭합니다.
  5. 설정을 바꾸고자 하는 Wi-Fi 카드 항목을 선택하고 마우스 오른쪽을 누른 다음 속성 메뉴를 클릭합니다.
  6. 대화상자의 네트워킹 탭 화면에 있는 구성 버튼을 클릭합니다.
  7. 장치 속성 대화상자의 고급 탭 화면으로 이동합니다.
  8. 제시되는 속성 항목들은 제품별로 다르며 자세한 사항은 아래의 제품별 설명을 참고하여 값을 설정하시기 바랍니다.

Intel Dual Band Wireless-AC 7265

기술 사양

  • 주파수 대역: 2.4GHz, 5GHz
  • 무선 표준: 802.11ac

주파수 대역 선택

장치 속성 대화상자에서 아래와 같이 선택합니다.

  • Wireless Mode
    • 1. 802.11a => 5GHz
    • 4. 802.11b/g => 2.4GHz (이 항목 선택)
    • 6. 802.11a/b/g => 2.4GHz, 5GHz

Intel Dual Band Wireless-AC 8265

기술 사양

  • 주파수 대역: 2.4GHz, 5GHz
  • 무선 표준: 802.11ac

주파수 대역 선택

장치 속성 대화상자에서 아래와 같이 선택합니다.

  • 기본 설정 밴드
    • 2.4 GHz 밴드 선택 => 2.4GHz (이 항목 선택)
    • 5GHz 밴드 기본 설정 => 5GHz

ipTIME N159UA_Solo 사양

기술 사양

  • 주파수 대역: 2.4GHz
  • 무선 표준: 2.4GHz - 11n

주파수 대역 선택

장치 속성 대화상자에서 아래와 같이 선택합니다.

  • 선택 옵션 없이 2.4 GHz로 동작

기술 사양

  • 주파수 대역: 2.4GHz, 5GHz
  • 무선 표준: 2.4GHz - 11b, g, n / 5GHz - 11a, n, ac

주파수 대역 선택

장치 속성 대화상자에서 아래와 같이 선택합니다.

  • Wireless Mode
    • IEEE 802.11b/g => 2.4GHz (이 항목 선택)
    • IEEE 802.11ac => 5GHz

주변 기기에서 AP 접속 테스트

Raspberry Pi 3 Model B

  • 2.4GHz 무선랜 (참고)
    • Wi-Fi Direct Legacy AP 연결
      • ipTIME N150UA_Solo => 연결 가능
      • TP-LINK Archer T2U => 2.4GHz로 동작할 때 연결 가능

Written with StackEdit.

2020년 3월 7일 토요일

Windows 10 Wi-Fi Direct Legacy AP 설정

Windows 10 Wi-Fi Direct Legacy AP 설정

Windows 10 컴퓨터의 Wi-Fi Direct Legacy AP 설정을 통하여 기기들간 무선 로컬 영역 연결을 구성할 수 있습니다. 주요 특징은 다음과 같습니다.

  • AP에 연결하고자 하는 기기의 Wi-Fi 연결 장치는 Wi-Fi Direct를 지원하지 않아도 됩니다. 그러나 AP로 설정하고자 하는 기기의 Wi-Fi 연결 장치는 Wi-Fi Direct를 지원해야 합니다.
  • 기기의 인터넷 연결 상태와 무관하게 AP로 설정할 수 있습니다. 인터넷 연결을 필요로 하는 모바일 핫스팟과 다른 점입니다.
  • AP에 연결하는 기기의 관점에서는 인터넷이 없는 무선 공유기에 연결하는 것과 같습니다.
  • AP를 실행하고 있는 기기를 포함하여 이에 연결된 기기들간 TCP/UDP 통신을 할 수 있습니다. 물론 주고 받는 데이터는 AP를 경유하게 됩니다.

실습을 위하여 사용한 기기는 아래와 같습니다.

  • 기기-1 (Windows 10): Wi-Fi Direct Legacy AP로 설정
  • 기기-2 (Windows 10): 기기-1AP에 연결
  • 기기-3 (iOS): 기기-1AP에 연결

기기-1에 장착되어 있는 네트워크 연결 장치들은 다음 표와 같습니다.

이름 인터넷 연결 상태 유형
이더넷 1 연결됨 이더넷
Wi-Fi 1 연결됨 Wi-Fi
Wi-Fi 2 인터넷 없음 Wi-Fi

기기-1Wi-Fi Direct를 지원하는지 여부는 ipconfig /all 명령을 실행하여 알 수 있습니다.

>ipconfig /all

무선 LAN 어댑터 로컬 영역 연결* 5:

   설명. . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #3

무선 LAN 어댑터 로컬 영역 연결 항목이 있고 그에 대한 설명 부분에 Microsoft Wi-Fi Direct Virtual Adapter가 표시되면 Wi-Fi Direct를 지원하고 있는 것입니다.

Wi-Fi Direct Legacy AP 설정

데모 프로그램 빌드

  1. GitHub 저장소에서 아래의 데모 프로그램 소스를 다운로드합니다.

  2. Visual Studio에서 솔루션 파일 WiFiDirectLegacyAPDemo.sln을 열고 빌드합니다.

Wi-Fi Direct Legacy AP 실행

  1. 명령 프롬프트 창을 엽니다.

  2. 아래와 같이 WiFiDirectLegacyAPDemo 프로그램을 실행하고 SSID와 암호를 설정한 후 AP를 시작합니다.

    >WiFiDirectLegacyAPDemo.exe
    
    >ssid direct-ap-test
    
    Setting SSID to direct-ap-test
    
    >pass t12345678
    
    Setting Passphrase to t12345678
    
    >start
    
    Starting soft AP...
    
    Connection Listener is ready
    Soft AP started!
    Peers can connect to: direct-ap-test
    Passphrase: t12345678
    
    >
    

로컬 영역 연결 확인

다른 기기에서 Wi-Fi AP로 연결

  1. 기기에 표시되는 Wi-Fi AP 목록에서 direct-ap-test 항목을 선택합니다.
  2. 암호 t12345678를 입력하고 연결을 시도합니다.

TCP 서버/클라이언트 통신 확인

IP 주소 파악

기기-1의 IP 주소는 아래 명령으로 파악할 수 있습니다.

>ipconfig /all

무선 LAN 어댑터 로컬 영역 연결* 5:

   ...
   설명. . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #3
   IPv4 주소 . . . . . . . . . : 192.168.137.1(기본 설정)
   ...

출력 메시지의 설명 항목에 Wi-Fi Direct가 포함되어 있고 Wi-Fi Direct Legacy AP 설정 이후에는 IP 주소가 표시됩니다.

AP에 연결한 기기들의 IP 주소는 기기-1AP 설정 명령 프롬프트 창에서 파악할 수 있습니다. 표시되는 정보는 다음과 같습니다.

Connection Requested...

Peer connected: 192.168.137.215

TCP 통신

  1. 기기-1에 TCP 서버 프로그램을 띄우고 클라이언트 프로그램들의 접속을 기다립니다.

  2. 기기-2에 TCP 클라이언트 프로그램을 띄우고 192.168.137.1 주소에 연결합니다.

  3. 기기-3에 TCP 클라이언트 프로그램을 띄우고 192.168.137.1 주소에 연결합니다.

  4. 기기-2의 TCP 클라이언트 프로그램에서 메시지를 보내고 TCP 서버 프로그램에서 수신하는지 확인합니다.

  5. 기기-3의 TCP 클라이언트 프로그램에서 메시지를 보내고 TCP 서버 프로그램에서 수신하는지 확인합니다.

  6. 기기-1의 TCP 서버 프로그램에서 기기-2로 메시지를 보내고 TCP 클라이언트 프로그램에서 수신하는지 확인합니다.

  7. 기기-1의 TCP 서버 프로그램에서 기기-3로 메시지를 보내고 TCP 클라이언트 프로그램에서 수신하는지 확인합니다.

관련 자료

Written with StackEdit.

Windows 10 모바일 핫스팟 설정

Windows 10 모바일 핫스팟 설정

Windows 10 컴퓨터의 모바일 핫스팟 설정을 통하여 다음 두 가지 기능을 수행할 수 있습니다.

  • 인터넷 연결 공유: 컴퓨터의 인터넷 연결을 다른 기기에 제공합니다. 모바일 핫스팟에 연결하는 기기의 관점에서는 무선 공유기에 연결하여 인터넷을 사용하는 것과 같습니다.
  • 로컬 영역 연결: 모바일 핫스팟에 연결된 기기들로 로컬 네트워크가 구성되는 것이기 때문에 기기들간 TCP 서버/클라이언트 통신이 가능해집니다.

인터넷 연결을 공유하는 것이 목적이기 때문에 모바일 핫스팟으로 설정하고자 하는 기기가 인터넷에 연결되어 있지 않은 상태에서는 모바일 핫스팟을 설정할 수 없고 따라서 로컬 영역 연결도 구성되지 않습니다.

실습을 위하여 사용한 기기는 아래와 같습니다.

  • 기기-1 (Windows 10): 모바일 핫스팟으로 설정
  • 기기-2 (Windows 10): 기기-1모바일 핫스팟에 연결
  • 기기-3 (iOS): 기기-1모바일 핫스팟에 연결

기기-1에 장착되어 있는 네트워크 연결 장치들은 다음 표와 같습니다.

이름 인터넷 연결 상태 유형
이더넷 1 연결됨 이더넷
Wi-Fi 1 연결됨 Wi-Fi
Wi-Fi 2 인터넷 없음 Wi-Fi

모바일 핫스팟 설정

기기-1모바일 핫스팟으로 설정합니다. 인터넷에 연결되어 있는 네트워크 연결 장치들 중에서 한 개만 모바일 핫스팟으로 설정할 수 있습니다.

  1. Windows 시작 메뉴에서 설정 버튼을 클릭합니다.

  2. 네트워크 및 인터넷 항목을 클릭합니다.

  3. 왼쪽 메뉴 목록에서 모바일 핫스팟을 클릭합니다.

  4. 네트워크 편집 버튼을 클릭하고 아래와 같이 설정합니다.

    • 네트워크 이름: hotspot-ap-test (이름을 다르게 지정할 수 있음)
    • 네트워크 암호 : t12345678 (암호를 다르게 지정할 수 있음)
    • 네트워크 대역: 2.4GHz (일부 기기가 5GHz 대역을 지원하지 않기 때문에 2.4GHz 대역으로 지정)
  5. 다음 두 항목의 값을 아래와 같이 설정합니다.

    • 다음에서 인터넷 연결 공유: 이더넷 1 / Wi-Fi 1 중에서 Wi-Fi 1 선택
    • 내 인터넷 연결 공유: Wi-Fi / Bluetooth 중에서 Wi-Fi 선택
  6. 아래 스위치를 사용하여 모바일 핫스팟을 켭니다.

    • 다른 디바이스와 인터넷 연결 공유:

인터넷 연결 확인

  1. 기기에 표시되는 Wi-Fi AP 목록에서 hotspot-ap-test 항목을 선택합니다.
  2. 암호 t12345678를 입력하고 연결을 시도합니다.
  3. 웹 브라우져를 띄워서 웹 페이지가 정상적으로 열리는지 확인합니다.

TCP 서버/클라이언트 통신 확인

IP 주소 파악

기기-1의 IP 주소는 아래 명령으로 파악할 수 있습니다.

>ipconfig /all

무선 LAN 어댑터 로컬 영역 연결* 5:

   ...
   설명. . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #3
   IPv4 주소 . . . . . . . . . : 192.168.137.1(기본 설정)
   ...

출력 메시지의 설명 항목에 Wi-Fi Direct가 포함되어 있고 모바일 핫스팟 설정 이후에는 IP 주소가 표시됩니다.

모바일 핫스팟에 연결한 기기들의 IP 주소는 기기-1모바일 핫스팟 설정 화면에서 파악할 수 있습니다. 표시되는 정보는 다음과 같습니다.

  • 디바이스 이름
  • IP 주소
  • 물리적 주소

TCP 통신

  1. 기기-1에 TCP 서버 프로그램을 띄우고 클라이언트 프로그램들의 접속을 기다립니다.

  2. 기기-2에 TCP 클라이언트 프로그램을 띄우고 192.168.137.1 주소에 연결합니다.

  3. 기기-3에 TCP 클라이언트 프로그램을 띄우고 192.168.137.1 주소에 연결합니다.

  4. 기기-2의 TCP 클라이언트 프로그램에서 메시지를 보내고 TCP 서버 프로그램에서 수신하는지 확인합니다.

  5. 기기-3의 TCP 클라이언트 프로그램에서 메시지를 보내고 TCP 서버 프로그램에서 수신하는지 확인합니다.

  6. 기기-1의 TCP 서버 프로그램에서 기기-2로 메시지를 보내고 TCP 클라이언트 프로그램에서 수신하는지 확인합니다.

  7. 기기-1의 TCP 서버 프로그램에서 기기-3로 메시지를 보내고 TCP 클라이언트 프로그램에서 수신하는지 확인합니다.

Written with StackEdit.

Llama 3.2로 문장 생성 및 챗팅 완성 실습

Llama 3.2로 문장 생성 및 챗팅 완성 실습 Running Meta Llama on Linux 문서의 내용을 참고하여 Llama 3.2 1B 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 ...