gpt4 book ai didi

CUDA 内核 - 嵌套 for 循环

转载 作者:行者123 更新时间:2023-12-04 06:47:49 25 4
gpt4 key购买 nike

你好
我正在尝试编写一个 CUDA 内核来执行以下代码段。

for (n = 0; n < (total-1); n++)
{
a = values[n];

for ( i = n+1; i < total ; i++)
{
b = values[i] - a;
c = b*b;

if( c < 10)
newvalues[i] = c;
}
}

这是我目前所拥有的,但似乎没有给出正确的结果?有谁知道我做错了什么。干杯
__global__ void calc(int total, float *values, float *newvalues){

float a,b,c;

int idx = blockIdx.x * blockDim.x + threadIdx.x;

for (int n = idx; n < (total-1); n += blockDim.x*gridDim.x){
a = values[n];

for(int i = n+1; i < total; i++){
b = values[i] - a;
c = b*b;

if( c < 10)
newvalues[i] = c;

}
}

最佳答案

在 2D 中实现这个问题并使用 2D 线程块启动您的内核。 x 和 y 维度中的线程总数将等于 总计 .内核代码应如下所示:

__global__ void calc(float *values, float *newvalues, int total){


float a,b,c;

int n= blockIdy.y * blockDim.y + threadIdx.y;
int i= blockIdx.x * blockDim.x + threadIdx.x;

if (n>=total || i>=total)
return;

a = values[n];
b = values[i] - a;
c = b*b;
if( c < 10)
newvalues[i] = c;

// I don't know your problem statement but i think it should be like: newvalues[n*total+i] = c;


}

更新:

这就是你应该如何调用内核
dim3 block(16,16);
dim3 grid ( (total+15)/16, (total+15)/16 );
calc<<<grid,block>>>(float *val, float *newval, int T);

还要确保在内核中添加这一行(请参阅更新的内核)
if (n>=total || i>=total)
return;

关于CUDA 内核 - 嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5306117/

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