我正在向 C++ 和 OpenCL 迈出第一步来执行并行计算,但是我遇到了一个错误,试图将侦听器函数传递给 clCreateContext。我的程序(未显示)崩溃没有错误,所以我需要添加一个函数来将 OpenCL 错误转发到 stdout/stderr。clCreateContext 函数有一个函数指针参数,该函数指针可以设置为将错误消息转发到 stdout 或 stderr。但是使用 Codeblocks/MinGW 时出现编译时错误:
invalid conversion from 'void (*)(const char*, const void*, size_t, void*)' to
'void (*)(const char*, const void*, size_t, void*)'
Run Code Online (Sandbox Code Playgroud)
我在下面的代码中复制了这个问题:
#include <stdlib.h>
#include <stdio.h>
#include <CL\cl.h>
void pfn_notify(const char *errinfo, const void *private_info, size_t cb, void *user_data)
{
fprintf(stderr, "OpenCL Error (via pfn_notify): %s\n", errinfo);
}
int main()
{
/*Get platform and device info*/
cl_platform_id platform_id = NULL;
cl_uint ret_num_platforms;
cl_int ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms);
cl_device_id device_id = NULL;
cl_uint ret_num_devices;
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, &ret_num_devices);
/*Create openCL context*/
cl_context context = clCreateContext(NULL, 1, &device_id, &pfn_notify, NULL, &ret);
/*Some line after this throws an error*/
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了使用这种精确方法和 pfn_notify 的代码示例,但我不确定为什么我的程序甚至没有编译。提前致谢,如果还有什么我可以发布的帮助,请告诉我。
您需要将函数声明为
void CL_CALLBACK pfn_notify(.....
Run Code Online (Sandbox Code Playgroud)
正如评论者指出的那样;如果此代码在 C++ 文件中,则它还需要是:
extern "C" void CL_CALLBACK pfn_notify(.....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |