문제

내 프로그램에서 작업하는 렌더링을 반복되는 프랙탈 시스템입니다.내가 원하는 기능 추가 누군가 자신의 자신의 반복 과정이고,컴파일하는 코드는 실행하는 것이 효율적으로 합니다.

나는 현재 없이 작업을 수행하는 방법을 모르는 것과 같은 것이 무엇에 대한 도움말을 읽게하는 방법을 자세히 알아보세요.

주요 프로그램에서는 C++로 작성 된 나는 익숙한 C++.사실은 주어진 대부분의 시나리오를 내가 어떻게 변환하여 어셈블리 코드는 것이 목표를 달성하지만,내가 알지 못하는 방법을 변환하는 기계 코드입니다.가능하면 내가 좋아하는 동적으로 코드를 컴파일과 같은 방법을 내가 믿고 많은 게임 system 에뮬레이터 작동합니다.

만약 그것이 무엇인지 명확하지 않는,말 그래서 내가 명확히 할 수 있습니다.

감사합니다!

도움이 되었습니까?

해결책

일부 CPU 에뮬레이터는 기계 코드를 바이트 코드 인 것처럼 취급하며 거의 Java 인 것처럼 JIT 컴파일을 수행합니다. 이는 매우 효율적이지만 개발자는 에뮬레이터가 실행되고 각 CPU에 모방 된 각 CPU에 대해 컴파일러 버전을 작성해야 함을 의미합니다.

그것은 일반적으로 x86에서만 작동하며 다른 것을 사용하고 싶은 사람에게 성가신 것을 의미합니다.

또한 LLVM 또는 Java Byte Code 또는 .NET CIL로 번역 한 다음 컴파일하면 작동합니다.

귀하의 경우 나는 그런 종류의 일이 가장 좋은 방법인지 확신하지 못합니다. 동적 라이브러리를 사용 하여이 작업을 수행 할 것이라고 생각합니다. "플러그인"을 포함하는 디렉토리를 만들고 사용자가 자신의 컴파일을 수집하도록하십시오. 프로그램을 디렉토리로 스캔하고 각 DLL 또는.를로드하십시오.

이렇게하면 코드 컴파일러를 작성하는 데 시간이 줄어들고 실제로는 실제로 작업을 수행하는 데 더 많은 시간을 소비합니다.

다른 팁

동적으로 컴파일되는 루틴은 특정 언어로되어야합니다. 그 질문에 대한 답이 "예, C ++이어야한다"라면 운이 좋지 않을 것입니다. C ++는 온라인 재 컴파일에 최악의 선택에 관한 것입니다.

응용 프로그램의 동적 부분 (프랙탈 반복자 루틴)이 주요 CPU 병목 현상입니까? 컴파일되지 않은 언어를 사용할 여유가 있다면 아마도 많은 어려움을 겪을 수 있습니다. LUA와 JavaScript는 모두 고유 한 컴파일 된 코드보다 몇 배만 느리게 실행되는 해석 된 언어로 크게 최적화 된 해석 된 언어입니다.

기계 코드에 컴파일하기 위해 동적 기능이 실제로 필요하다면 가장 좋은 방법은 아마도 사용하는 것입니다. Clang/llvm. Clang은 Apple이 개발 한 C/Objective-C 프론트 엔드로 온라인으로 동적 재 컴파일이 잘 작동합니다. LLVM은 Clang이 휴대용 바이트 코드에서 기본 기계 코드로 변환하는 데 사용하는 백엔드입니다. Clang은 현재 C ++의 많은 부분을 지원하지 않는다는 점이 있습니다. 왜냐하면 그것은 제대로하기가 어려운 언어이기 때문입니다.

당신이 쓸 수 있는 동적 확장에서는 C(C++),찾을 수 있습니다 작은 C 컴파일러 을 사용합니다.그것은 아래에서 사용할 수집,호환 Windows 와 리눅스,그리고 그것은 작은 실행 파일(또는 라이브러리)에~100kb 에 대한 전처리,컴파일러,링커 및 어셈블러를 모두 그것은 매우 빠르다.의 단점은 것은 물론,는 것과는 비교할 수 없는 최적화 얻을 수 있습니다.또 다른 단점은 X86 만 AFAIK.

는 경우 쓰기로 결정하는 어셈블리,TCC 처리할 수 있는 것-- 문서 지원한다고 말하는 가스와 같은 구문,그리고 그것은 지원하지 않 86 컴파일러입니다..

TCC 또한 완벽하게 지원하는 ANSI C 며,그것은 거의 완벽하게 준수 C99.

즉,당신은 중 하나를 포함 TCC 으로 실행 가능 응용 프로그램과 함께 또는 사용 libtcc(가 너무 많은 문서의 libtcc 온라인이지만,그것은에서 사용할 수 있는 원본 패키지).어느 쪽이든,당신이 할 수 사용 tcc 를 생성할 동적 또는 공유 라이브러리, 또는 실행 파일.당신 동적 라이브러리 경로는,당신은 그냥 넣어에 Render (또는 어떤)기능,그리고 dlopenLoadLibrary 에 그것은,그리고 전화 Render 마지막으로 실행하는 사용자 설계되었습니다.또는,당신은 만들 수 있는 독립 실행 및 popen 그것은,모든 통신을 통해 독립형의 stdinstdout.

화면에 표시 할 픽셀을 생성하므로 Dynamic Shader Compile과 함께 HLSL을 사용하는 것을 고려해 보셨습니까? 이를 통해 정확히 이런 종류의 물건을 위해 설계된 SIMD 하드웨어와 DirectX에 바로 구축 된 동적 컴파일러에 액세스 할 수 있습니다.

LLVM 하고 싶은 일을 할 수 있어야합니다. 이를 통해 객체 지향적 인 방식으로 컴파일하려는 프로그램에 대한 설명을 작성한 다음 런타임에 해당 프로그램 설명을 기본 기계 코드로 컴파일 할 수 있습니다.

나노 지트 당신이 원하는 것에 대한 아주 좋은 예입니다. 중간 Langauge에서 기계 코드를 생성합니다. C ++이며 작고 크로스 플랫폼입니다. 나는 그것을 매우 광범위하게 사용하지 않았지만, 단지 데모를 위해 놀기를 즐겼습니다.

코드를 파일에 뱉어 동적으로로드 된 라이브러리로 컴파일 한 다음로드하여 호출하십시오.

GPU 기반 솔루션을 사용할 수없는 이유가 있습니까? 이것은 하나를 위해 비명을 지르는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top