说我想将两个矩阵相乘,50 乘 50。我有 2 种方法来安排线程和块。
a) 一个线程来计算结果矩阵的每个元素。所以我在线程中有一个循环乘以一行和一列。
b) 一个线程来做每次乘法。结果矩阵的每个元素需要 50 个线程。乘法完成后,我可以使用二进制归约来求和结果。
我不确定该走哪条路,所以我选择了 b。这并不理想。事实上它很慢。知道为什么吗?我的猜测是线程太多并且它们大部分时间都在等待资源,这是真的吗?
我正在尝试修改CUDA SDK中的imageDenosing类,我需要多次重复过滤器来捕获时间.但我的代码不能正常工作.
//开始
__global__ void F1D(TColor *image,int imageW,int imageH, TColor *buffer)
{
const int ix = blockDim.x * blockIdx.x + threadIdx.x;
const int iy = blockDim.y * blockIdx.y + threadIdx.y;
if(iy != 0 && iy < imageH-1 && ix < imageW)
{
float4 fresult = get_color(image[imageW * iy + ix]);
float4 fresult4 = get_color(image[imageW * (iy+1) + ix]);
float4 fresult5 = get_color(image[imageW * (iy-1) + ix]);
float4 fresult7;
fresult7.x = fresult.x*0.5+fresult4.x*.25+fresult5.x*.25;
fresult7.y = fresult.y*0.5+fresult4.y*.25+fresult5.y*.25;
fresult7.z = fresult.z*0.5+fresult4.z*.25+fresult5.z*.25;
buffer[imageW * iy …
Run Code Online (Sandbox Code Playgroud) cuda ×2