注册域名的官方网站,做外贸的怎么建立自己的网站,网站开发费怎么做账,漳浦建设银行网站接上文#xff0c;本章尝试在RV1106上使用TBB。依然是一言难尽#xff0c;此文依然只是记录实践过程。
源码下载#xff0c;编译TBB 下载地址: https://github.com/oneapi-src/oneTBB 版本使用 oneTBB-2021.11.0#xff0c;这个版本可以使用cmake编译。
cmake配置完后本章尝试在RV1106上使用TBB。依然是一言难尽此文依然只是记录实践过程。
源码下载编译TBB 下载地址: https://github.com/oneapi-src/oneTBB 版本使用 oneTBB-2021.11.0这个版本可以使用cmake编译。
cmake配置完后进入build目录使用make指令正常情况下应该一切正常遗憾的是编译过程会报如下错误
/media/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:328:5: error: fenv_t does not name a type; did you mean dev_t?fenv_t *my_fenv_ptr;^~~~~~dev_t
compilation terminated due to -Wfatal-errors经查fenv_t是跟硬件相关的浮点环境起初我怀疑是未包含指定的头文件于是在交叉编译工具链下找到fenv.h头文件加入到爆粗的部分错误依旧。 然后发现是相关宏定义不存在于是尝试单独验证fenv.h的有效性。
验证浮点环境的有效性 需要关注的点包括以下几个部分 1、工具链应该包含支持C99标准的编译器如gcc或clang以及相应的库支持。 2、在交叉编译工具链中查找是否存在 fenv.h 头文件这通常是存在于交叉编译链工具下 3、 - 编译时通过 -stdc99 或者 -stdgnu99 参数强制使用C99标准如果是C代码确保编译器同时支持C和C99混合编译。 4、- 对于某些交叉编译环境可能仍需要类似 _GLIBCXX_USE_C99_FENV_TR1 这样的宏定义来开启特定的浮点环境支持。 5、编写一个小测试程序来尝试使用 fenv.h 中的功能并通过交叉编译工具链进行编译和链接然后在目标平台上运行以验证实际功能是否有效。
针对以上几点逐步检查后写了如下代码进行编译验证 tt.cpp
//#include fenv.h
#include cfenv
#include iostream
class cpu_ctl_env {fenv_t *my_fenv_ptr;
};
int main()
{int cc 55;std::coutcc ccstd::endl;//int cc MAXTEST;//std::coutTest cc cc std::endl;return 0;
}编译验证 1、直接使用环境UBUNTU自带的指令 运行结果正常
rootubuntu:/media/test# g -stdc11 -D_GLIBCXX_USE_C99_FENV_TR11 tt.cpp -o tt
rootubuntu:/media/test# ./tt
cc 55
rootubuntu:/media/test# 2、使用交叉编译工具链
rootubuntu:/media/test# /opt/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g -stdc11 -D_GLIBCXX_USE_C99_FENV_TR11 tt.cpp -o tt
In file included from tt.cpp:2:
/opt/toolchain/arm-rockchip830-linux-uclibcgnueabihf/arm-rockchip830-linux-uclibcgnueabihf/include/c/8.3.0/cfenv:61:11: error: ::fenv_t has not been declaredusing ::fenv_t;^~~~~~
/opt/toolchain/arm-rockchip830-linux-uclibcgnueabihf/arm-rockchip830-linux-uclibcgnueabihf/include/c/8.3.0/cfenv:62:11: error: ::fexcept_t has not been declaredusing ::fexcept_t;............以上截取编辑结果前段显示可以看到报出未定义的错误检查交叉编译链工具里的头文cfenv件可以看到fenv_t的定义就在其中但无法编译通过。尝试添加命名空间using namespace std。改用fenv.h头文件均报相同错误。
#ifndef _GLIBCXX_CFENV
#define _GLIBCXX_CFENV 1#pragma GCC system_header#if __cplusplus 201103L
# include bits/c0x_warning.h
#else#include bits/cconfig.h#if _GLIBCXX_HAVE_FENV_H
# include fenv.h
#endif#ifdef _GLIBCXX_USE_C99_FENV_TR1#undef feclearexcept
#undef fegetexceptflag
#undef feraiseexcept
#undef fesetexceptflag
#undef fetestexcept
#undef fegetround
#undef fesetround
#undef fegetenv
#undef feholdexcept
#undef fesetenv
#undef feupdateenvnamespace std
{// typesusing ::fenv_t;using ::fexcept_t;// functionsusing ::feclearexcept;using ::fegetexceptflag;using ::feraiseexcept;using ::fesetexceptflag;using ::fetestexcept;using ::fegetround;using ::fesetround;using ::fegetenv;using ::feholdexcept;using ::fesetenv;using ::feupdateenv;
} // namespace std#endif // _GLIBCXX_USE_C99_FENV_TR1#endif // C11#endif // _GLIBCXX_CFENV至此这条路走不通基本确认未RV1106不支持浮点环境也就意味着无法使用TBB进行加速。药丸…只能手写线程加速麻烦很啊。
TIPS:下一步将使用RV1126的交叉编译工具链进行测试评估下RV1126是否支持该方法。