저는 몇 가지 프로젝트에서 OpenCL을 사용해 왔지만 항상 하나의 (때로는 다소 큰) 기능으로 커널을 작성했습니다. 이제는 좀 더 복잡한 프로젝트를 진행하면서 여러 커널에서 기능을 공유하고 싶습니다.대형 OpenCL 커널을 구조화하는 방법은 무엇입니까?
그러나 예제에서는 모두 하나의 파일로 커널을 보여줍니다 (아주 적은 수의 2 차 함수 호출). 복수 파일을 사용할 수 있어야합니다. clCreateProgramWithSource()
은 여러 문자열을 허용합니다 (그리고 결합한다고 가정합니다). pyopencl의 Program()
은 하나의 소스 만 사용합니다.
그래서 경험이 일을 함께 사람을 듣고 싶습니다
- 여러 소스 파일과 관련된 어떤 문제가 있습니까?
- 단순히 파일을 연결하기 위해 pyopencl을 사용하는 것이 가장 좋은 방법입니까?
- (모든 것이 사용되지는 않더라도 각 커널과 함께 라이브러리 소스를 전달하는 대신) 함수 라이브러리를 컴파일 할 수있는 방법이 있습니까?
- 매번 라이브러리 소스를 전달해야하는 경우 사용되지 않는 기능이 삭제됩니다 (오버 헤드 없음)?
- 기타 모범 사례/제안 사항?
감사합니다.
#include "part1.cl"#include "part2.cl"을 갖는 하나의 연결 파일을 만들 수 있습니다. 이것은 나를 위해 일합니다 (NVidia 컴파일러), 아마 모든 것이 컴파일 될 때마다 실행됩니다. 함수 코드가 각 커널에 인라인되어 있기 때문에 미리 컴파일 된 함수 라이브러리가 약간 공상 과학적이라고 생각합니다. 그래서 재귀 함수를 작성할 수 없습니다. 덕분에 –