Go에서 Benchmarking Raspberry Pi Zero W GPIO Speed

4659 단어 RaspberryPiGo
드디어 RasPiZeroW를 받았기 때문에 Go 언어로 GPIO 접근 속도를 조사했습니다.
이 연구는 GPIO를 간단하게 전환하고 1Clock의 주파수를 얻는다.
2018/4/29 리뷰에서 C 컴파일러의 최적화 옵션을 사용하는 것이 좋기 때문에 WiringPi-Go로 추가 검증을 진행합니다
for {                                                                                               
    pin.Toggle()
}

조사 결과


  • C 언어 참조 WiringPi
    결과는 6MHz입니다.상당히 빠르다.(코드는 팔꿈치 마디가 아닌 아래에서 참조하는 Hi/Low 쓰기 순환입니다.)

    벤치마킹 라즈베리 파이 GPIO 속도 참조
  • gobot
    결과는 10KHz로 느리다.점공비도 좋지 않다.
    하지만 이 라이브러리는 I2C, SPI, 센서 등 위젯을 지원하는 초보자들에게 친근한 라이브러리로 GitHub 스타도 많다.oled의 동작 확인이 당신의 보살핌을 받았기 때문에 지지하고 싶습니다
    공식 샘플 코드의 내용은 Hello World 정도인데 좀 아쉽다.
  • go-rpio
    결과는 400KHz입니다.C의 1/10 이하와 외로움의 결과
  • bcm2835
    결과는 340KHz입니다.C의 BCM2835는 WiringPi보다 빠를 텐데 왜 그러지 않을까... 그냥 bcm2835나 CFO로 C를 호출하는 것 같은데 비용이 너무 많이 들어요.
  • WiringPi-Go
    결과는 200KHz입니다.역시 씀씀이가 크다.
    이후 원본 코드를 수정해야 합니다.


    WiringPi-Go 소스에 최적화 옵션 추가 및 재검사
    결과는 300KHz의 효과가 있다.하지만 지난번 코드를 실행하면 250KHz이기 때문에 효과는 20%입니다.
  • package rpi
    
    /*
    #cgo CFLAGS: -g -O3 -std=c99
    #cgo LDFLAGS: -lwiringPi
    
    CFO를 처음 만져보는 옵션이라 적절한 방법인지 모르겠습니다.
    적당히 다시 쓰면 Go컴파일러한테 혼나고 결과도 바뀌니까 괜찮겠지
    CFO의 옵션은 댓글로 쓸 수 있나
    후기
    고라면 C에 가까운 성능을 낼 수 있기 때문에 고신도인 ※ 저에게는 고통스러운 현실입니다.아, 라즈파는 I2C와 SPI를 쓰면 돼요.
    ※ 작업상.넷만 만지니까 Go는 영원히 기억이 안 나지만 Go의 디자인 사상은 나를 감동시켰다.평소에 안 쓰니까 기억이 안 나요.
    따라서 Go가 조금 더 빠른 GPIO를 원한다면 go-rpio 를 사용하세요.
    참고로 Toggle보다 High/Low를 쓰는 것이 10퍼센트 정도 빠릅니다.
    Toggle은 전환하기 전에 if문장에 들어가기 때문에 속도가 떨어질 것 같습니다.
    for {                                                                                               
        pin.High()
        pin.Low()                                                                           
    }
    
    상관없어, ZeroW도 소니가 만든 것 같아.

    좋은 웹페이지 즐겨찾기