当数据类型的大小发生变化时,我试图查看内核中执行的指令数
为了获得自定义大小的数据结构,我创建了一个结构如下,
#define DATABYTES 40
__host__ __device__
struct floatArray
{
float a[DATABYTES/4];
};
然后创建一个内核只是为了将上述数据类型数组从一个数组复制到另一个数组
__global__
void copy_large_data(floatArray * d_in, floatArray * d_out)
{
d_out[threadIdx.x] = d_in[threadIdx.x];
}
然后用一个块只为 32 个线程调用上述内核
floatArray * d_in;
floatArray * d_out;
cudaMalloc(&d_in, 32 * sizeof(floatArray));
cudaMalloc(&d_out, 32 * sizeof(floatArray));
copy_large_data<<<1, 32>>>(d_in, d_out);
当我使用nvprof
和检查程序来分析程序时,instructions per warp
我可以看到参数值随着 值的变化而变化DATABYTES
。
我的问题是,这个指令计数增加的原因是否是由于floatArray
结构内的数组。因为当我们在内核中调用copy的时候,实际上是a
在struct里面扩展复制了数组的每一个元素floatArray
,创建了更多的指令。
有没有办法使用一条指令在内核中复制自定义结构变量?