Tôi đã thấy cả hai phiên bản trong hướng dẫn, nhưng tôi không thể tìm ra, những lợi thế và bất lợi của họ là gì. Cái nào là đúng?Sự khác nhau giữa việc tạo đối tượng đệm với clCreateBuffer + CL_MEM_COPY_HOST_PTR so với clCreateBuffer + clEnqueueWriteBuffer là gì?
cl_mem input = clCreateBuffer(context,CL_MEM_READ_ONLY,sizeof(float) * DATA_SIZE, NULL, NULL);
clEnqueueWriteBuffer(command_queue, input, CL_TRUE, 0, sizeof(float) * DATA_SIZE, inputdata, 0, NULL, NULL);
vs
cl_mem input = clCreateBuffer(context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, ,sizeof(float) * DATA_SIZE, inputdata, NULL);
Cảm ơn.
[Cập nhật]
tôi thêm CL_MEM_COPY_HOST_PTR,
để ví dụ thứ hai để làm cho nó đúng.
Xin chào Grizzly, bạn đã đúng. Tôi đã quên CL_MEM_COPY_HOST_PTR. Vì vậy, không có sự thật khó khăn mà nói cho một hay khác? – Framester
Ít nhất là từ các thông số kỹ thuật không nên có. Hiệu suất ofcourse có thể (hoặc có thể không) khác nhau, nhưng điều đó sẽ phụ thuộc vào việc thực hiện và có thể thay đổi, vì vậy tôi sẽ không dựa vào nó dù sao đi nữa (nếu hiệu suất là rất quan trọng đối với việc truyền tải bộ nhớ) (sử dụng CL_FALSE như là tham số chặn của clEnqueueWriteToBuffer) Một lần nữa có hay không nó nhanh hơn phụ thuộc vào ntation impleme, cho CPU nhanh nhất nên sử dụng CL_USE_HOST_PTR Nói chung tôi sẽ đảm bảo rằng memtransfertime không quan trọng nhiều và được donewith rằng – Grizzly
Cảm ơn, hiệu suất không phải là sooo quan trọng, nó đã được nhiều hơn một câu hỏi học thuật. – Framester