cuốn sách gpt4 ai đã làm

lỗi clGetEventProfilingInfo() trong MacOSX?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 23:26:28 25 4
mua khóa gpt4 Nike

Một số hàm clGet*Info OpenCL cho phép (a) lấy kích thước của thông tin được yêu cầu hoặc (b) chính thông tin đó. Điều này là cần thiết trong một số trường hợp, chẳng hạn như lấy tên của thiết bị:

tên char*;
size_t size_of_name;
clGetDeviceInfo(thiết bị, CL_DEVICE_NAME, 0, NULL, &size_of_name);
tên = (char*) malloc(size_of_name);
clGetDeviceInfo(thiết bị, CL_DEVICE_NAME, size_of_name, tên, NULL);

Tất cả các hàm clGet*Info OpenCL đều tuân theo mẫu này. Tuy nhiên, tôi thấy rằng tính năng này không hoạt động đối với clGetEventProfilingInfo() trên MacOSX. Khi tôi cố gắng lấy các kích thước như:

clGetEventProfilingInfo(evt, CL_PROFILING_COMMAND_START, 0, NULL, &info_size);

Tôi gặp lỗi -30 (CL_INVALID_VALUE) mặc dù việc triển khai trả về 8 byte trong biến info_size. Đây là một ví dụ nhỏ hoàn chỉnh về hành vi này:

#include 

#if được xác định(__APPLE__) ||
#include
#else
#include
#endif

int main(int argc, const char * argv[])
{

nền tảng cl_platform_id;
cl_device_id dev;
trạng thái cl_int;
cl_uint a_buffer[1024];
cl_mem buf_dev = NULL;
cl_command_queue cq = NULL;
cl_event evt = NULL;
cl_context ctx = NULL;
cl_ulong t_start, t_end;
size_t thông tin_size;

for (int i = 0; i < 1024; i++) a_buffer[i] = (i * 7) % 100;

trạng thái = clGetPlatformIDs(1, &platf, NULL);
if (trạng thái) { printf("%d\n", status exit(-1);}

trạng thái = clGetDeviceIDs(platf, CL_DEVICE_TYPE_ALL, 1, &dev, NULL);
if (trạng thái) { printf("%d\n", status exit(-1);}

ctx = clCreateContext(NULL, 1, &dev, NULL, NULL, &status);
if (trạng thái) { printf("%d\n", status exit(-1);}

cq = clCreateCommandQueue(ctx, dev, CL_QUEUE_PROFILING_ENABLE, &status);
if (trạng thái) { printf("%d\n", status exit(-1);}

buf_dev = clCreateBuffer(ctx, CL_MEM_READ_WRITE, 1024*sizeof(cl_uint),
NULL, &trạng thái);
if (trạng thái) { printf("%d\n", status exit(-1);}

trạng thái = clEnqueueWriteBuffer(cq, buf_dev, CL_TRUE, 0,
1024*sizeof(cl_uint), a_buffer, 0, NULL, &evt);
if (trạng thái) { printf("%d\n", status exit(-1);}

trạng thái = clFinish(cq);
if (trạng thái) { printf("%d\n", status exit(-1);}

trạng thái = clGetEventProfilingInfo(evt, CL_PROFILING_COMMAND_START, 0, NULL, &info_size);
if (trạng thái) { printf("%d\n", status exit(-1);}

trạng thái = clGetEventProfilingInfo(evt, CL_PROFILING_COMMAND_START, info_size, &t_start, NULL);
if (trạng thái) { printf("%d\n", status exit(-1);}

trạng thái = clGetEventProfilingInfo(evt, CL_PROFILING_COMMAND_END, 0, NULL, &info_size);
if (trạng thái) { printf("%d\n", status exit(-1);}

trạng thái = clGetEventProfilingInfo(evt, CL_PROFILING_COMMAND_END, info_size, &t_end, NULL);
if (trạng thái) { printf("%d\n", status exit(-1);}

printf("Tổng thời gian (ns): %lu\n", (unsigned long) (t_end - t_start));

clReleaseEvent(evt);
clReleaseMemObject(buf_dev);
clReleaseCommandQueue(cq);
clReleaseContext(ctx);

return 0;
}

Nó chạy tốt trên Linux và Windows với một số triển khai OpenCL khác nhau. Trên MacOSX, tôi gặp lỗi giá trị không hợp lệ.

Tôi biết rằng hàm clGetEventProfilingInfo() luôn trả về thông tin có kích thước cl_ulong, nhưng tôi đang thực hiện việc này một cách tự động nên thông tin kích thước luôn được yêu cầu trước để phân bổ bộ nhớ cho nó.

Cảm ơn trước.

câu trả lời hay nhất

Tôi đã chạy mã mẫu của bạn trên hệ thống OS X của riêng tôi và nhận được kết quả tương tự. thật thú vị,thông tin_kích thước Biến đầu ra được điền giá trị chính xác (8 byte), mặc dù mã lỗi được tạo ra.

Đây chắc chắn là một lỗi - trạng thái thông số kỹ thuật clGetEventProfilingInfo chỉ nên param_value_size trở lại CL_INVALID_VALUE nếu như thông sốKHÔNG NULL(Như bạn đã chỉ ra, với tất cả các clGet*Thông tin chức năng giống nhau).

Bạn có thể báo cáo những lỗi như vậy cho Apple tại đây: https://developer.apple.com/bug-reporting/

Giới thiệu về lỗi clGetEventProfilingInfo() trong MacOSX? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/26145603/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress