C2H는 C 파일에서 가속기 생성을 지원하지 않습니다.
C 소스 파일에서 C 소스 파일로 가속하려는 함수를 이동하는 것과 관련된 C 프로그램에서 가속기를 호출할 수 있는 해결 방법이 있습니다. 함수가 C 소스 파일에 있으면 C2H 컴파일러는 효과적으로 "보고" 하드웨어 가속기로 변환할 수 있습니다.
C와 C 함수(및 파일)를 혼합하는 데 필요한 몇 가지 추가 단계가 있습니다.
GNU 툴체인은 잘 정의된 명시적 주장 방법론을 통해 C 프로그램에서 C 함수를 호출하는 것을 지원합니다(또는 그 반대의 경우도 마찬가지). 이것이 작동하는 방식은 C 프로그램에서 컴파일러에게 C 대신 C 함수로 호출해야하는 함수를 알려주는 것입니다. 이 작업은 C 소스 파일 내에서 extern "C" 구문을 사용하여 수행됩니다.
작동 중인 extern "C" 구문의 몇 가지 예는 다음과 같습니다.
- C 프로그램에서 C 함수 호출하기
설정 : C 소스 파일 "foo.cpp"에서 호출하려는 C 소스 파일 "bar.c"에있는 void bar (void) 함수가 있습니다.
해결책 : 이것을 "foo.cpp"의 맨 위에 추가하십시오.
extern "C"void foo(void);
- C 프로그램에서 C 함수 호출하기
설정 : C 소스 파일 "foo.cpp"에서 호출하려는 C 소스 파일 "bar.c"에있는 함수 모음입니다.
해결책 : "foo.cpp"의 extern 문 상단에있는 함수 그룹 주위에 중괄호를 추가하기 만하면됩니다.
extern "C" {
무효 foo(무효);
int foo2 (int 번호);
int foo3(int number1, int number2);
}
- C 프로그램에서 C 헤더 호출
설정 : C 프로그램 "foo.c"에서 호출하려는 "bar.c"라는 파일에 C 함수 (또는 라이브러리)의 전체 모음이 있으며 절차 # 2 (위)를 통해 개별적으로 나열하고 싶지는 않습니다. 함수에 대한 인터페이스를 선언하는 "bar.h"라는 "bar.c"에 대한 헤더 파일이 있습니다.
해결책 : extern 문은 헤더 파일에서도 작동합니다 ... "foo.cpp" 파일에서 extern 문을 사용하여 헤더 파일을 추가합니다.
extern "C" {
#include "bar.h"
}
C2H와 함께 사용하는 것이 가장 좋은 방법론은 무엇입니까? C2H 컴파일러를 사용하는 경우 사용자가 가속 함수를 자체 파일로 "격리"하는 것이 좋으므로 첫 번째 예제를 사용하는 것이 C2H 컴파일러로 함수를 가속하는 가장 좋은 방법입니다.