forked from ShiqiYu/libfacedetection
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcuda_log.txt
114 lines (85 loc) · 5.49 KB
/
cuda_log.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
2024.4.17
blcokIdx.x 表示该block在grid中的 dimensionx
blcokIdx.y 表示该block在grid中的 dimensiony
blockDim.x 表示该线程所在的块在 x轴上有多少个线程
blockDim.y 表示该线程所在的块在 x轴上有多少个线程
threadIdx.x 表示该线程在线程块中的 dimensionx
threadIdx.y 表示该线程在线程块中的 dimensiony
2024.4.16
数据传输成功了,应该是最后一次记录这种话了,这次用printf打印成功了,
上次的失败是没有更改完全,没写完,,,这次看了两本cuda的书,应该ok了。
2024.4.12
终于把数据扔gpu上了,这里出了问题,通过gpt4写的代码看懂的
/*
cudaMalloc((void**)&d_obj, sizeof(CDataBlobKernel));
cudaMalloc((void**)&d_p, 128 * sizeof(float));
// cudaMalloc和cudaMemcpy都是在对 &d_obj 指向的内存进行操作,
// 也就是说cudaMallo和cudaMemcpy都是在对 d_obj 这个指针变量赋值
//
// 这里表示 d_p 的值指向gpu内存的一个128大小的浮点数数组的首地址。
// 因此 &d_p 依然是一个cpu内存的地址,d_p 的值指向gpu内存的一个128大小的浮点数数组的首地址。
// 同理,&d_obj 表示 cpu 内存上的地址, d_obj表示gpu内存上这个对象的首地址。
// 把数据从CPU内存复制到GPU内存
//cudaMemcpy(d_p, obj.p, 128 * sizeof(float), cudaMemcpyHostToDevice);
//cudaMemcpy(&(d_obj->p), &d_p, sizeof(float*), cudaMemcpyHostToDevice);
// 为什么要用上面的代码而不用下面这个,
// 猜测?
// obj.p 是一个主机指针,而 d_obj->p 是一个设备指针
// 上面的代码是复制的地址的值,下面这个是复制的内存的大小。
// 也许是d_obj->p分配了大小但没有调用构造函数初始化,导致不知道p这个指针的值是指向什么地方
// 而上面d_obj->p分配了大小,虽然也没有用构造函数初始化,但由于是对p赋值,因此可以成功。
cudaMemcpy(d_obj->p, obj.p, 128* sizeof(float), cudaMemcpyHostToDevice);
*/
2024.4.11
直接接入CDataBlob会重定义,只能把数据结构拆掉扔cuda来组装,
类里面不能直接定义一个gpu的函数,但是可以通过友元函数来实现类似于封装的效果,
数据的传输总算是有了个确切的解决方案。。。。
2024.4.10
要把CDataBlob引入cuda,,,,不太可能加个头文件就行,只能自己拓展一个一模一样的数据结构在cuda上运行了,相似就行,不用完全一样,
也可以引入这个CDataBlob,这样可以减少复杂度。
2024.4.9
本来想通过直接操作,CDataBlob的Data指针指向的内存来点积,做起来有点太过复杂了,加了中文注释,乱码了,就很头大,明天重做吧
2024.4.8
请别人帮我看了看,最主要的问题就是cpu和gpu的数据传输过多,负优化了,只能改整个卷积函数
出在kernel的函数太复杂,而调用cublas库的版本单纯的调用错了
2024.4.7
今天把cuda模块写好,分析性能就行。代码是加上去了,看起来没有问题,,但运行不出结果
2024.4.6
把cuda的优化已经尝试练了两个了,可以准备写进项目了,
晚上写vs的调试
cuda的调试今天就到此为止吧,有难度,暂时更该关注的不是这个,先跑起来。
cuda的调试很需要基础知识
2024.4.5
今天把cuda的函数调用基本熟悉了,但是不太理解不同维度的线程该怎么用来计算数组的对应元素。
优化思路大概有了,树形归约,明天写具体实现
2024.4.3
今天一大早cmakelists的自动补全就出问题了,然后找问题,改了半天也没用,就没改了,
然后就直接写,发现cmake -B这个指令都用不了,cmake出现了莫名其妙的错误,从开始菜单来修复后可以运行cmake了
也可以运行其他简单的cmake项目了,但运行这个项目的时候,提示cudaCompile.cmake模块报错,谷歌后没用。
重装cmake,解决了,又浪费了一早上
opencv也出问题了,应该是系统环境变量的问题,but,,,why?
add_subdirectory添加的是目录的名字,而不是project的
2024.4.2
昨晚用add_subdirectory解决了这个问题,但没有把我加的cuda_model放进去,install这里一直报错,
暂时注释掉,后面再添加install就行
emm,今天早上就摸鱼了,难得解决了一个大问题,找找cuda教程
2024.4.1
为什么这样就可以被正确设置
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
set(CMAKE_CUDA_ARCHITECTURES 86)
endif()
而set(CUDA_ARCHITECTURES 86)就不行?
直接将cuda文件加到target中里行不通,报了一个
A single input file is required for a non-link phase when an output file is specified的错误
重置了一次,试试子项目,这次以防万一,,,
2024.3.30
要在本机上运行,并测试,就需要使用demo,因此就需要修改cmakelists
而demo中检测图片命令行启动有问题,暂时改为内置图片。
因此cmakelists中demo设置为on,find_package 中添加PATHS opencv的路径。
另外,为了支持cuda,以及 optional compilation 需要添加宏定义语句和启用cuda,因此也需要修改cmakelists
原设置:
option(ENABLE_NEON "whether use neon, if use arm please set it on" OFF)
option(ENABLE_AVX512 "use avx512" OFF)
option(ENABLE_AVX2 "use avx2" ON)
option(DEMO "build the demo" ON)
option(USE_OPENMP "Use OpenMP" ON)