怎样将变量存在常量存储区进而加速读取

我有一个的的二维数组,数组的维数与传入参数n有关(既数组A[n,n])各个线程都要读取该数组的数据,那么将这个数组设为存储在常量存储器或纹理存储器内会不会使我的读取速度加快呢?怎样才能存在常量存储器区里,读的时候又怎么读?请高手指点!

应该能够加快,具体的做法编程指南中有实例,但是要注意数组的大小。

我这样定义、申请空间、应用对吗?
constant int *gpu_Matrix;
void Fun(int n,int *Matrix)
{
size_t Pitchx;
cudaMallocPitch((void **) &gpu_Matrix,&Pitchx,sizeof(float)*n,n);
cudaMemcpy2D(gpu_Matrix,Pitchx,Matrix,sizeof(float)*n,sizeof(float)*n,n,cudaMemcpyHostToDevice);
gpuFun<<<BlockNum,ThreadNum>>>(gpu_Matrix);
}

可以,但是更常用的是使用cudaMemcpyToSymbol函数

似乎不行,
global void test(int Putin,int result)
{
int tid=threadIdx.x;
int tem=2
Putin[tid];
result[tid]=tem;
}
constant int Par[128];
int main(int argc, char
argv)
{

if(!InitCUDA()) {
	return 0;
}

int result[128];
int *gpu_result;
for (int i=0;i<128;i++)
{
	result[i]=i;
}
size_t offset;
cudaMalloc((void**) &Par,sizeof(int)*128);
cudaMalloc((void**) &gpu_result,sizeof(int)*128);
cudaMemcpy(Par,result,sizeof(int)*128,cudaMemcpyHostToDevice);
//cudaMemcpyToSymbol(Par,result,sizeof(int)*128);
//cudaMemcpyToSymbol(&Par,result,sizeof(int)*128,offset,cudaMemcpyHostToDevice);
test<<<1,128>>>(Par,gpu_result);

cudaMemcpy(result,gpu_result,sizeof(int)*128,cudaMemcpyDeviceToHost);

return 0;

}
经过运算后result 应该是0、2、4、6、8、10·······为什么还是0、1、2、3、4、5、6问题好想就出在consant Par上了

从你的代码中没有发现问题,我现在在宿舍,明天去实验室帮你看一下,呵呵

下面的代码能够正确运行,你看看,希望对你有所帮助。

#include <stdio.h>

constant int Par[128];
global void test(int result)
{
int tid=threadIdx.x;
int tem=2
Par[tid];
result[tid]=tem;
}

int main(int argc, char* argv)
{
int result[128];
int gpu_result;
for (int i=0;i<128;i++)
{
result[i] = i;
}
// cudaMalloc((void
*) &Par,sizeof(int)128);
cudaMalloc((void
*) &gpu_result,sizeof(int)*128);
// cudaMemcpy(Par,result,sizeof(int)*128,cudaMemcpyHostToDevice);
cudaMemcpyToSymbol(Par,result,sizeof(int)*128);
//cudaMemcpyToSymbol(&Par,result,sizeof(int)*128,offset,cudaMemcpyHostToDevice);
test<<<1,128>>>(gpu_result);

cudaMemcpy(result,gpu_result,sizeof(int)*128,cudaMemcpyDeviceToHost);

for(int i = 0; i < 128; i++)
printf("%d ",result[i]);
return 0;
}