右键.cu文件选择
属性/Configuration Properties
, 转到
CUDA C/C++
、
Device
、
Code Generation
,然后检查它的设置:compute_X,sm_X (X数字的选择看
https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
)
像我的显卡是
RTX3060
,所以我需要将
compute_52,sm_52
改成
compute_86,sm_86
然后右键你的项目,选择
属性/Configuration Properties
, 转到
CUDA C/C++
、
Device
、
Code Generation
,
compute_52,sm_52
也要修改成
compute_86,sm_86
如果还是报错,尝试以下两种方式:
-
增加头文件
# include <time.h>
或者
sm_20_intrinsics.h
-
将
clock64()
修改成
clock()
-
增加头文件
#inlcude<device_launch_parameters_h>
-
修改.cu文件的配置属性,把项类型修改为
CUDA C/C++
(右键.cu文件,选择属性;其他缺少未定义标识符时,也要看一下这个改了没改)
cite:
https://blog.csdn.net/weixin_42478379/article/details/103656585
增加头文件
#include <math_functions.h>
同问题11
或
-
增加头文件
#include "cpu_anim.h"
(cite:
https://blog.csdn.net/xiao_lxl/article/details/52777670
; 下载链接:
https://github.com/tpoisot/CUDA-training/tree/master/utils/cuda_by_example/common
) - 我试过了,没用
-
还有说
tex2D
被弃用了,(cite:
https://stackoverflow.com/questions/67193791/how-to-replace-the-deprecated-tex2dtexturet-2-cudareadmodeelementtype-floa
)
这个错误的原因是:opencv的using namespace cv和windows.h中ACCESS_MASK定义冲突
注:养成写代码不用using namespace …的习惯
-
去掉
using namespace cv
,用
cv::
代替
https://stackoverflow.com/questions/16035401/incorrect-inclusion-of-a-cudart-header-error-on-cuda
https://www.codenong.com/16035401/
https://blog.csdn.net/tiao_god/article/details/112463732
make your own wrapper
自己写函数CudaSafeCall
cite:
https://forums.developer.nvidia.com/t/is-cudasafecall-no-longer-needed/27606
https://www.cnblogs.com/catnip/p/8630046.html
https://vimsky.com/examples/detail/cpp-ex-----CUDA_SAFE_CALL-function.html
出现在winnt.h
文件中
在winnt.h
加入#define no_init_all deprecated
cite:
https://www.coder.work/article/7473663
https://blog.csdn.net/weixin_44749766/article/details/90147106
报错:
‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
解决办法:
https://blog.csdn.net/muzihuaner/article/details/109886974
_CRT_SECURE_NO_WARNINGS
将setfill("0")
改成setfill('0')
vs的报错并没有影响工程的顺利编译,这个错误可能仅仅是vs对cuda语法的识别问题,就像对cuda中 “ <<< >>> ” 的不识别一样。(cite: https://www.jianshu.com/p/ed486942647b)
或:
- 加external “C” (我尝试了,没有用; cite:https://www.jianshu.com/p/7b40b7f846d7;https://blog.csdn.net/qq_35789421/article/details/117398582)
- 全局变量问题: https://blog.csdn.net/xdearluo/article/details/84142677
- 代码错误问题:https://blog.csdn.net/xdearluo/article/details/84142677
参考链接:
4. https://www.codenong.com/11217117/
5. cuda出现“error:未识别的blockIdx”解决方案: https://blog.csdn.net/deyuzhi/article/details/44114717
6. error:“ACCESS_MASK”: 不明确的符号:https://blog.csdn.net/jiao_mrswang/article/details/100209833
7. vs+cuda的环境配置:https://blog.csdn.net/weixin_41336841/article/details/118313452
8. .cpp
调用CUDA的.cu
中的函数:https://www.cnblogs.com/betterwgo/p/6843272.html
项目场景:
使用 Visual Studio 尝试在 VTM-6.0 的 VLCWriter.cpp 和 VLCReader.cpp 中调用自定义函数,自定义函数的声明的定义均在自己写的文件 HomoTransform.h, HomoTransform.cpp 中
由于需在 VLCWriter.cpp 和 VLCReader.cpp 中
@Override
public void run() {
bytes = mmInStream.read(buffer);
mHandler.o