我正在尝试评估OpenCL for AMD和Nvidia GPU之间的性能差异.我有一个执行矩阵向量乘法的内核.我现在在两个不同的系统上运行内核,我的笔记本电脑有一个带Ubuntu 12.04的NVidia GT525m和CUDA 4.0(包含OpenCL库和标题),另一个是带有Ubuntu的AMD Radeon HD7970的桌面12.04和最新的Catalyst驱动程序.
在内核中,我有两个#pragma unroll语句可以为Nvidia OpenCL实现产生大的加速(~6x).但是,AMD OpenCL版本不会产生任何加速.使用AMD APP内核分析器查看内核会出现错误,因为行程计数未知,因此未使用展开.所以我的问题是,是否#pragma unroll可以与AMD OpenCL一起使用,或者是否有替代方案(可能是我不知道的编译器标志).我已经在下面包含了内核
__kernel void mvKernel(__global float* a, const __global float* x, __global float* y, int m, int n)
{
float sum = 0.0f;
__global float* A;
int i;
int j = 0;
int indx = get_global_id(0);
__local float xs[12000];
#pragma unroll
for(i = get_local_id(0); i < n; i+= get_local_size(0)) {
xs[i] = x[i];
}
barrier(CLK_LOCAL_MEM_FENCE);
A = &a[indx];
#pragma unroll 256
for(i …Run Code Online (Sandbox Code Playgroud) compiler-construction pragma opencl loop-unrolling amd-processor