gpt4 book ai didi

c++ - CUDA 共享内存的可能性

转载 作者:行者123 更新时间:2023-11-28 05:55:48 38 4
gpt4 key购买 nike

我在理解如何实现 CUDA 共享内存时遇到了一些问题,因为除了检查某个线程应该执行哪些计算之外,我没有将线程号用于任何其他用途。

__global__ void gpu_histogram_equalization(unsigned char * img_out, unsigned char * img_in,
int * hist_in, int img_size, int nbr_bin, int numOfThreads, int * lut){


int i = 0;
int x = threadIdx.x + blockDim.x*blockIdx.x;

int start;
int end;

/* Get the result image */
if(x >= img_size) {
return;
}
start = ((img_size/numOfThreads) * x);
if(numOfThreads == 1) {
end = (img_size/numOfThreads);
}
else {
end = ((img_size/numOfThreads) * (x+1));
}
for(i = start; i < end; i ++){
if(lut[img_in[i]] > 255){
img_out[i] = 255;
}
else{
img_out[i] = (unsigned char)lut[img_in[i]];
}

}
}

任何人都可以澄清我的猜测是正确的,这是不可能使用共享内存的吗?

最佳答案

如果多次重复使用数据,使用共享内存可以提高性能。可以重写代码以利用更高的内存带宽并放弃使用共享内存。

像这样:

__global__ void gpu_histogram_equalization(unsigned char * img_out, unsigned char * img_in,
int * hist_in, int img_size, int nbr_bin, int numOfThreads, int * lut){
int lutval;
int x = threadIdx.x + blockDim.x*blockIdx.x;

/* Get the result image */
if(x >= img_size) {
return;
}

lutval = lut[img_in[x]];

if(lutval > 255){
img_out[x] = 255;
}
else{
img_out[i] = (unsigned char)lutval;
}
}

关于c++ - CUDA 共享内存的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34175096/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com