sycl - 如何在 SYCL parallel_for(内核)中打印?
问题描述
我正在研究与 oneAPI basekit 一起提供的 vectorAdd 示例应用程序。当我尝试在内核中打印总和时,出现以下错误。
编译时请查找随附的源代码和错误。
//Source code
cgh.parallel_for<class VectorAdd>(num_items, [=](id<1> wiID) {
sum_accessor[wiID] = addend_1_accessor[wiID] + addend_2_accessor[wiID];
std::cout<<"Sum : "<<sum_accessor[wiID]<<std::endl; // I want to print this sum
});
在编译期间,我收到以下错误。
//Error generated while compiling
usr/lib/gcc/x86_64-linux-gnu/7.4.0/../../../../include/c++/7.4.0/bits/ostream.tcc:359:25: error: SYCL kernel cannot have a class with a virtual function table
extern template class basic_ostream<char>;
^
vector-add.cpp:159:6: note: used here
std::cout<<"Sum : "<<sum_accessor[wiID]<<std::endl;
^
vector-add.cpp:159:11: error: SYCL kernel cannot use a global variable
std::cout<<"Sum : "<<sum_accessor[wiID]<<std::endl;
解决方案
使用 sycl::stream 类在 SYCL 代码中输出日志记录。有一个指南解释了如何做到这一点。
你的代码应该是这样的
//Source code
sycl::stream out(1024, 256, cgh);
cgh.parallel_for<class VectorAdd>(num_items, [=](id<1> wiID) {
sum_accessor[wiID] = addend_1_accessor[wiID] + addend_2_accessor[wiID];
out << "Sum : " << sum_accessor[wiID] << cl::sycl::endl; // I want to print this sum
});
推荐阅读
- multithreading - 如何使用 Groovy 并行运行 SoapUI 测试步骤
- facebook-graph-api - 使用新政策自动在自己的 Facebook 上发布消息
- oauth-2.0 - OAuth2 无法获取验证码。总是得到'经过身份验证的客户端无权使用此授权授予类型'
- sql - 将 SYSDATE 分配给提示
- python - SQLAlchemy 在链式联合/except_ 上丢失列标签
- web-services - Struts 1 excludePattern 供使用webservice
- sql-server - 是否可以在事实维度 DWH 设计中使用系统版本化的时态表?
- oracle - 使用 NIFI 将时间戳字段从 Oracle 提取到 HDFS
- php - mysql中前3个最大值的顺序不正确
- vue.js - vue 在插入字符串时使用组件