常量内存


一、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.

Logo

欢迎来到FlagOS开发社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。

更多推荐