2017-09-26 1 views
0

Nvidia의 Tesla K10.G2.8GB에서 우분투 16.04.3 64 비트, 의 pyopenCL을 통해 OpenCL 프로그래밍.헤더 포함 OpenCL (32 비트 대 64 비트)

OpenCL 커널에 헤더 파일을 포함하지 않는 한 지금까지 아무 것도 원활하게 실행됩니다. 내 헤더 파일의 상단에 #include <stdlib.h>을 넣어 자마자, 내 인 OpenCL 커널 컴파일이 다른 파일들을 그 문제에 대한 검색

gnu/stubs-32.h 
sys/cdefs.h 

되는 사이에, 누락 실패

Error "gnu/stubs-32.h: No such file or directory" while compiling Nachos source code 같은 답변을 제공합니다

또는

https://askubuntu.com/questions/470796/fatal-error-sys-cdefs-h-no-such-file-or-directory

baiscally 제안 t o 기본 문제가 64 비트/32 비트 문제라고 가정하고 libc6-dev-i386 또는 gcc-multilibg++-multilib을 설치하십시오. 제 질문은 GPU 용 OpenCL 바이너리가 32 비트 바이너리로 컴파일 된 것입니다 (어떻게 확인할 수 있습니까?).

가 다른주의 사항이 있습니까, 내가 64 비트 OS에서 32 비트 바이너리를 컴파일 할 :

그렇다면 ?

추가 정보 : 커널을 32 비트로 컴파일 할 때 64 비트 부동 소수점을 사용할 수 있습니까? (예를 들어, #pragma OPENCL EXTENSION cl_khr_fp64 : enable 여전히 작동합니다?)

없는 경우 :

내가 수동/위치해야합니까 필요한 모든 헤더 파일을 복사하여 손으로 포함되어 있습니까?

또한 동료 중 일부는 OpenCL 커널에 표준 C 헤더를 포함시키는 것이 링커 누락으로 인해 가능하다는 것을 의심합니다. 그 위에 어떤 빛이라도 인정받습니다.

+0

나는 잘 모르겠지만, 나는 OpenCL을 그냥 언어 https://www.khronos.org/files/opencl-1-2-quick-reference-card 것 같아요.pdf 및 관련 자료 : https://www.khronos.org/opencl/resources. PyOpenCL에 대한 나의 매우 제한된 지식에서 나는 커널에 #include _any_library_를 작성하거나 보지 못했다. – benshope

+0

SO에서 'include header openCL'을 빨리 검색하면 OpenCL 커널 코드에 자신의 헤더를 포함시킨 사람들이 나타납니다. OpenCL C (기본적으로 C의 하위 집합)로 작성된 커널 코드에 대해 얘기하고 있습니다. – Dschoni

+0

아, 그래요. 그냥 이걸 봤어 : https://stackoverflow.com/questions/14502925/include-headers-to-opencl-cl-file 나는 PyOpenCL에 대해 더 많이 알고있는 사람이 당신의 질문에 대답하도록 할 것이다. – benshope

답변

2

표준 C 라이브러리 및 기타 시스템 헤더는 그들이 OpenCL을 C 코드 반면, 현재의 시스템 (호스트)와 만 호환됩니다 기본적으로 있기 때문에, OpenCL을 C 코드로 를 포함 할 수없는 수있는와 다른 장치에 실행 다른 아키텍처 ( 의 GPU). printf와, 연산 기능, 아토, 화상 관련 기능 등 다수 : 표준 C 기능을 대체

는 오픈 CL C는 설정된 #INCLUDE없이 사용할 수있는 기본 기능의 정의 .

은 참조하십시오 전체 목록은 "오픈 CL 사양을 6.12 내장 기능"당신이 OpenCL을 C 코드 와 헤더를 생성하고 #include를 의미하지 않는다 https://www.khronos.org/registry/OpenCL/specs/opencl-1.2.pdf

OpenCL C 프로그램에 통합합니다. 이 잘 작동 :

// foo.h 
void foo() { 
    printf("hello world!"); 
} 

// kernel.cl 
#include "foo.h" 
__kernel void use_foo() { 
    foo(); 
}