常量内存cudaMemcpyToSambol
·
常量内存
一、cudaMemcpyToSymbol
cudaMemcpyToSymbol(const void* symbol, const void* src, size_t count);src是原地址,symbol是目标地址,size_t count是内存大小.
二、代码
#include<cuda_runtime.h>
#include<iostream>
using namespace std;
__constant__ float num[40];
__global__ void exchangeKernel(float *a)
{
int offset = threadIdx.x + blockDim.x * blockIdx.x;
a[offset] = num[offset];
}
int main(){
float *devA,tmp[40],res[40];
cudaMalloc((void**)&devA, 40*sizeof(float));
for (int i = 0; i < 40; i++)tmp[i] = i*15;
//your code here
cudaMemcpyToSymbol(num, tmp, 40 * sizeof(float));
//end of your code
exchangeKernel << <4, 10 >> >(devA);
cudaMemcpy(res, devA, 40 * sizeof(float), cudaMemcpyDeviceToHost);
for (int i = 0; i < 40; i++){
cout << res[i] << " " << endl;
}
return 0;
}
运行结果:
0
15
30
45
60
75
90
105
120
135
150
165
180
195
210
225
240
255
270
285
300
315
330
345
360
375
390
405
420
435
450
465
480
495
510
525
540
555
570
585
总结
cudaMemcpy需要cudaFree函数,而cudaMemcopyToSambol不需要cudaFree.
欢迎来到FlagOS开发社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。
更多推荐



所有评论(0)