FPGA direct p2p communication
- 1 mincfg 파일 [connectivity] 정리
- –connectivity.nk <kernel_name>:#:<cu_name1>,<cu_name2>, … CU의 이름지정은 optional이다. 자동으로 커널네임에 _1,_2,_3을 붙여서 지정된다.
C++ file access 정리 (fstream, ifstream, ofstream, )
open
open
를 통해 fstream에 대한 파일을 지정할 수 있다.
ifstream, ofstream
초기화와 함께 정의되며 open
와 같이 바이너리 모드로 열고 닫을 수 있다.
ifstream fin(<text_name>, ios_base::in | ios_base::binary )
C file access (fopen /open)
fopen은 File pointer를 사용하고 fwrite시 파일이 없으면 생성해준다. open은 바이너리만 지원하고 int 리턴값을 통해 파일 테이블에 접근한다. 파일이 없을때 에러를 출력한다.
size_t fread(void* buf, size_t size, size_t count, FILE *stream)
fread/fwrite에 대해 잘못 사용하는 경우가 많아서 작성한다. size에는 데이터 형의 크기, count에는 읽어들일 개수를 적어야한다. 그냥 size에 모든 값을 적는 예시가 많던데 이는 잘못된 예시이다.
pread/pwrite
pread/pwrite는 read(), write()함수와 lseek()함수의 결합으로 offset 이동 후 read/write를 수행한다.
errno
이런 파일 입출력 관련 함수들은 에러 메세지를 따로 출력하지 않고
perror("<함수이름>")
이런 형식으로 에러를 출력해야 원인을 알 수 있다.
OpenCL API to interact with OpenCL buffers
OpenCL buffer에서는 두가지 옵션을 제공한다.
- Read and write buffers using
clEnqueueReadBuffer
andclEnqueueWriteBuffer
- Map and unmap using
clEnqueueMapBuffer
andclEnqueueUnmapMemObject
in C.
1번의 read/write의 경우 data가 to/from OpenCL buffer 이동하는 것을 의미하고 보통 linux system memory와 CMEM memory(OpenCL buffer)간 통신을 의미한다. 여기서 CMEM은 physicallay continuous block에 대한 API를 의미한다.