海光 CPU+麒麟 os 跑 Python 很慢的问题有人遇到过吗?

对比

选手一:国际选手

  • Intel(R) Xeon(R) CPU E5-2690
  • Gcc 11.3.0
  • Ubuntu22.04

选手二:国产选手

  • Hygon C86 7285
  • gcc 7.3.0
  • Kylin Linux Advanced Server V10 (Sword)

压力测试—— python

选手一:

  • Intel(R) Xeon(R) CPU E5-2690
  • python3.10
  • Ubuntu22.04

选手二:

  • Hygon C86 7285
  • python3.7
  • Kylin Linux Advanced Server V10 (Sword)

测试代码

import time

def calculate():
    # 这里是一个简单的计算密集型任务,模拟耗时操作
    for _ in range(10000000):
        result = 10 * 20

if __name__ == "__main__":
    num_iterations = 10  # 设置要进行的迭代次数

    start_time = time.time()

    for i in range(num_iterations):
        calculate()

    end_time = time.time()
    elapsed_time = end_time - start_time

    print(f"Total time taken for {num_iterations} iterations: {elapsed_time:.2f} seconds")

测试结论

  • 选手一: ubuntu+志强

    • 3.10 (原生)版本耗时:2.20秒
    • 3.7(docker)版本耗时:3.19秒
  • 选手二:麒麟+海光

    • 3.10(docker)版本耗时:5.808秒
    • 3.7(原生)版本耗时:5.05秒

压力测试—— c 语言

选手一:国际选手

  • Intel(R) Xeon(R) CPU E5-2690
  • Gcc 11.3.0
  • Ubuntu22.04

选手二:国产选手

  • Hygon C86 7285
  • gcc 7.3.0
  • Kylin Linux Advanced Server V10 (Sword)

测试代码

#include <stdio.h>
#define LOOP_COUNT 1000000000

int main() {
    int i;
    long long sum = 0;

    for (i = 0; i < LOOP_COUNT; i++) {
        sum += i;
        sum = sum * i + i; 
        sum = sum / (i + 1);
    }


    printf("Sum: %lld\n", sum);

    return 0;
}

gcc -o test test.c && time ./test

测试结论

  • 选手一:19.324 秒
  • 选手二:22.527秒

上面的代码:

  • 在 ubuntu23.04+i7-13700k + gcc 11.4.0上运行 4.692 秒
  • 在 macbook pro m1 + clang 14.0.3上运行 8.102 秒
  • 在 Intel Xeon Processor (Skylake, IBRS) + centos7 +gcc 4.8.5上运行 15.653 秒

测试结论:

  • 跑 c 语言,「志强+ubuntu」 和 「海光+麒麟」 速度差不多,只有 10% 的差距
  • 跑 python,「志强+ubuntu」比 「海光+麒麟」快 3 倍

又多挑选了一个选手

测试代码

import time

def calculate():
    # 这里是一个简单的计算密集型任务,模拟耗时操作
    for _ in range(10000000):
        result = 10 * 20

if __name__ == "__main__":
    num_iterations = 10  # 设置要进行的迭代次数

    start_time = time.time()

    for i in range(num_iterations):
        calculate()

    end_time = time.time()
    elapsed_time = end_time - start_time

    print(f"Total time taken for {num_iterations} iterations: {elapsed_time:.2f} seconds")

测试结果

操作系统(发行版)Linux内核CPUpython 版本耗时(秒)
Debian104.19.0-17-amd64Intel(R) Xeon(R) Platinum 8269CY3.7.32.09
Ubuntu22.045.15.0-76-genericIntel(R) Xeon(R) CPU E5-2690 v43.10.52.17
Kylin Linux Advanced Server V104.19.90-24.4.v2101.ky10.x86_64Hygon C86 7285 32-core3.7.95.08
Mac 13.4.1NoneApple Silicon M13.10.101.12
Ubuntu23.105.19.0-46-generici7-13700K3.9.130.78
CentOS Linux 73.10.0-1160.90.1.el7.x86_64Intel Xeon Processor (Skylake, IBRS)3.6.82.37

我的疑惑点在于,海光 CPU 其实就是 AMD 一代锐龙换了一个 logo,所以其性能是不差的

c 语言程序的测试结果也印证了这一点

但是 python 居然可以慢 3 倍,我就不理解了


补充一个 golang 的测试

package main

import (
    "fmt"
    "time"
)

func calculate() {
    // 这里是一个简单的计算密集型任务,模拟耗时操作
    for i := 0; i < 10000000; i++ {
        result := 10 * 20
        _ = result
    }
}

func main() {
    numIterations := 2000 // 设置要进行的迭代次数

    startTime := time.Now()

    for i := 0; i < numIterations; i++ {
        calculate()
    }

    endTime := time.Now()
    elapsedTime := endTime.Sub(startTime)

    fmt.Printf("Total time taken for %d iterations: %.2f seconds\n", numIterations, elapsedTime.Seconds())
}

CGO_ENABLED=0 go build main.go

操作系统(发行版)Linux内核CPU耗时(秒)
Ubuntu22.045.15.0-76-genericIntel(R) Xeon(R) CPU E5-2690 v45.84
Kylin Linux Advanced Server V104.19.90-24.4.v2101.ky10.x86_64Hygon C86 7285 32-core11.21
Mac 13.4.1NoneApple Silicon M16.32

测试结果发现,这段 golang 程序,在麒麟+海光上也慢

阅读 3.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题