M1 Mac에서 놀라운 단일 코어 병렬성 테스트

M1 Mac이 출시 된 이후 Intel Mac과 비교하는 수많은 벤치 마크가있었습니다. 대부분의 결과는 성능과 전력 효율성 모두에서 M1을 선호합니다. 새로운 M1 MacBook Air를 받았을 때 M1이 왜 그렇게 성능이 좋은지 설명하는 이론 중 하나를 테스트하는 데 관심이있었습니다.

컴퓨터 공학에서 동적 실행 (일명 비 순차적 실행)이라는 기술을 사용하여 명령 처리 (페치, 디코딩, 디스패치, 실행 등)의 여러 단계를 병렬화하여 단일 CPU 코어가 많은 것을 처리 할 수 ​​있습니다. 명령 파이프 라인에서 가능한 한 동시에 명령. 이 기술을 사용하면 프로세서는 프로그램의 원래 순서가 아닌 입력 데이터 및 처리 장치의 가용성에 따라 결정된 순서로 명령을 실행합니다. 이를 위해서는 CPU가 현재 실행중인 명령어보다 먼저 몇 가지 명령어를 가져오고 디코딩 할 수 있어야합니다.

M1은 모든 명령어의 길이가 32 비트 인 ARM 명령어 세트를 사용합니다. 다음 몇 가지 명령어를 가져 오는 것은 비교적 쉽습니다. 그러나 인텔 프로세서는 가변 명령어 길이가있는 훨씬 더 복잡한 x86 명령어 세트를 사용하므로 일반적으로 현재 명령어를 디코딩하지 않고는 다음 명령어가 시작되는 위치를 결정할 수 없습니다. 인텔은 가능한 모든 명령 경계를 가져오고 어느 것이 올바른지 확인하는 무차별 대입 기술을 사용하여 프로세서를 더 복잡하고 덜 효율적으로 만듭니다. 이것이 얼마나 중요한지, 그리고 그것이 M1의 성능 향상에 기여하는지 테스트하고 싶습니다.

아이디어는 데이터 종속성으로 인해 순차적으로 실행되어야하는 명령어로 구성된 두 개의 간단한 작업 AB 를 작성하는 것입니다 . 각각을 루프에서 1 억 번 실행하고 소비 된 시간을 각각 t1t2로 둡니다 . 그런 다음 A 와 B 의 지침을 인터레이스하여 작업 C 를 만듭니다 . C 의 명령어는 두 개의 독립적 인 작업 에서 나왔기 때문에 병렬로 실행할 수있는 기회를 만듭니다. 같은 횟수로 C 를 실행 하고 소비 된 시간을 t3으로 둡니다 . 루프가 약간의 오버 헤드를 추가하고 C 의 명령어 절반이 다른 절반과 동시에 기회 적으로 실행될 수 있으므로 t3 < t1 + t2를 예상해야합니다 . 얼마나 T3 것은 미만이다 T1 + T2 동적 실행이 얼마나 효과 보여줍니다.

관심이 있다면 전체 프로그램이 GitHub에 있습니다 . 이것은 내 작업 A입니다 .

i = 0;
    a = 0;
    while (i < n) {
        if (i % 3 == 0) {
            a += i*2;
        } else {
            a -= i;
        }
        i++;
    }

작업 B 는 매우 유사합니다.

j = 0;
    b = 0;
    while (j < n) {
        if (j % 7 == 0) {
            b += j*6;
        } else {
            b -= j;
        }
        j++;
    }

i = 0;
    j = 0;
    a = 0;
    b = 0;
    k = 0;
    while (k < n) {
        if (i % 3 == 0) {
            a += i*2;
        } else {
            a -= i;
        }
        i++;
        if (j % 7 == 0) {
            b += j*6;
        } else {
            b -= j;
        }
        j++;
        k++;
    }

x86_64에서 소비 된 시간

t1 + t2 는 약 750,000이고 t3 는 그보다 약 18.3 % 적었습니다. 동적 실행으로 인해 일부 비용이 절감되었습니다.

M1 MacBook Air에서 정확히 동일한 프로그램 (물론 ARM 용으로 다른 바이너리로 컴파일 됨)을 실행했을 때. 결과는 예상치 못한 결과였습니다.

M1에서 소비 된 시간

C 를 실행 하는 데 걸린 시간은 A 또는 B 를 실행하는 데 걸린 시간보다 약간 더 길었습니다 ! 이 실험을 여러 번 시도했는데 결과는 매우 비슷했습니다. 이것은 동적 실행이이 테스트에 큰 결함이 없다고 가정 할 때 M1에서이 특정 프로그램에 대해 거의 완벽한 효율성을 달성 함을 의미합니다.

두 플랫폼의 숫자를 합치면 차이가 더 분명해집니다.

M1이 파이프 라인 최적화에 더 좋을 것으로 예상했지만 그 차이는 생각보다 훨씬 더 컸습니다. 시간이 더 있으면 어셈블리 코드에서 결과를 더 조사하고 확인할 계획입니다. 나중에이 기사가 어떻게 잘못되었는지에 대해 이야기하는 나 (또는 ​​다른 사람이 나를 때렸다면 다른 사람)의 기사를 볼 수 있습니다. ;-)

Suggested posts

캡슐보다 낫습니까?

캡슐보다 낫습니까?

새로운 논문에서 Geoffrey Hinton이 이끄는 연구팀은 신경망 (Transformers, Neural Fields, Contrastive Representation Learning, Distillation and Capsules)의 5 가지 발전의 강점을 결합하여이를 가능하게하는 비전 시스템 "Glom"의 아이디어를 상상합니다. 고정 아키텍처가있는 신경망을 사용하여 이미지를 각 이미지에 대해 서로 다른 구조를 가진 부분 전체 계층 구조로 구문 분석합니다. 심리적 증거는 인간이 시각 장면을 부분 전체 계층으로 파싱하고 부분과 전체 사이의 관점 불변 공간 관계를 모델링한다는 것을 보여줍니다.

똑똑한 자동차를위한 새로운 두뇌

똑똑한 자동차를위한 새로운 두뇌

이번 주에 칩 부족 위기는 미국 대통령의 자동차 산업을 돕기위한 행정 명령을 받기 위해 확대됩니다. 말하기 쉬운 위기는 기회와 함께 올 수 있으며 상태 견적에 도전하기는 어렵습니다.