2013-10-13 1 views
3

Linux 및 Windows 용 휴대용 GUI 도구 키트에서 작업 중이며 일부 성능 문제가 있습니다. 여러 시스템에서 (악명 높은 Intel GMA 3650을 기반으로하는 내 netbook) 드라이버 설치시 매우 큰 영향을받습니다.X11 GUI 성능

그러나 역설은 대체 VESA 드라이버가 설치되었을 때 내 코드의 성능이 전용 드라이버에서보다보다 훨씬 높은 입니다.

반면 독점 드라이버 인 은 예상대로으로 컴퓨터 성능이 매우 좋습니다. 하드웨어 가속이 작동하고 고화질 비디오가 문제없이 재생됩니다.이 경우에만 내 코드이이 이상한 역전환 방식으로 영향을받습니다.

내 코드는 아무 문제없이 좋은 속도 등

윈도우 포트 (WINAPI를 사용)를 실행하는 Xlib, Xft, pthreads의, 같은 일반적인 라이브러리를 사용합니다. 와인에서도. 또 다른 역설로서, Windows 용으로 컴파일되고 WINE에서 실행되는 동일한 프로그램이 Linux 컴파일 프로그램보다 훨씬 빠릅니다.

이 효과의 원인과 수정할 위치를 알려주세요.

소스 코드 저장소는이 휴대용 예입니다뿐만 아니라 Windows 및 Linux 용으로 컴파일 할 수 있습니다 (일반 FASM에 대한 freshlib/test_code0/TestLib.asm 컴파일)

managed by fossil scm

한 시험 예 trunk/freshlib/TestFreshLib.fpr에서입니다.

업데이트 1 : 몇 가지 생각과 코드를 탐색 한 후, 나는 가설을 가지고 있습니다. 윈도우에 그래픽을 그리는 데 두 가지 다른 방법을 사용하고 있습니다.

  1. 선 및 직사각형을 그리는 데 XLib 드로잉 기능을 사용합니다.
  2. Xft 라이브러리를 사용하여 텍스트를 그립니다.

테스트중인 컨트롤은 이미지 버퍼가 서버 측의 픽스맵 인 이중 버퍼링을 사용합니다.

하지만 IIRC, Xft는 클라이언트 측에서 드로잉 한 다음 이미지를 비트 맵 이미지로 X 서버에 보내고 XLib는 서버 측에서 직접 그립니다.

이러한 두 가지 방법 (및 하드웨어 가속과의 연결)간에 충돌이 발생할 수 있습니까?

+0

가장 놀라운 소리입니다. 문제를 SSCCE로 격리 할 수 ​​있습니까? –

+0

SSCCE 란 무엇입니까? 참고, 저는 C/C++ 또는 Linux/X11 프로그래밍 전문가는 아닙니다. :) – johnfound

+1

아, "짧은, 자기 포함, 올바른 예". 그러나 불행히도 아니오. 당연히 리포지토리 (repository)에 당신을 가리킬 수 있습니다. 이것은 오픈 소스입니다 만, 꽤 많은 파일이있어, 어디에서 문제를 검색 할 수 있을지 모릅니다. (그리고 그것은 어셈블리 언어로되어 있습니다 :)) – johnfound

답변

0

X 라이브러리는 자동으로 (XQuartz API로이 목적으로 Apple에서 설계 한 OpenCL) 할 수 있지만 X 라이브러리는 하드웨어 가속을 사용하도록 설계되지 않았습니다. OpenGL과 directX는 일반적으로 게임에서 볼 수있는 3D 환경에서 잘 작동합니다.

하지만 2D 용으로 사용할 수도 있습니다. Direct3D는 다각형을 사용하도록 설계되었습니다. Direct2D는 판 그래픽 용입니다. 처음에는 OpenGl이 일반적인 목적을 위해 설계되었습니다. 따라서 하드웨어 가속 그래픽에 사용할 수있는 많은 기능이 있습니다.

주요 X11 구현에는 GLX DRI과 Gallium이 포함됩니다.
필자는 API를 사용하는 것을 작성한 적이 없지만 특정 프로그램이 이러한 방법으로 도면을 가속화한다는 것을 알고 있습니다.

대체 VESA의 성능 이점은 다음과 같은 설명이있을 수 있습니다. 독점 드라이버는 추가 검사를 수행합니다 (예 : 하드웨어 가속을 사용할지 묻는 메시지가 표시되는지 확인한 다음 일반 Xlib은 가속을하지 않음). 대부분의 경우) 반면에 fallback 드라이버는 하드웨어 가속을 사용할 수없고 GPU 대신에 CPU를 사용하기에 앞서 해협에 빠지게됩니다.