我有一个CUDA程序,其中内核寄存器将最大理论达到的占用限制在%50。因此,我决定使用共享内存,而不是寄存器,这些变量是块线程之间的常量,并且在整个内核运行过程中几乎是只读的。我不能在这里提供源代码;我所做的在概念上是这样的:
我最初的计划是:
__global__ void GPU_Kernel (...) {
__shared__ int sharedData[N]; //N:maximum amount that doesn't limit maximum occupancy
int r_1 = A; //except for this first initial
我遇到了一个奇怪的问题。到目前为止,我正在用OpenCL实现一些线性代数,只有矩阵乘法,并在我的笔记本电脑上进行了测试。代码非常简单:
__kernel void matrix_mult(__global float* a,
__global float* b,
__global float* c,
const int N)
{
int row = get_global_id(1);
int col = get_global_id(0);
float sum = 0.0f;
for (in