我有一个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
我有下面的代码,我在终端中运行它。在另一个终端中,我打开了“top”,在那里我可以看到我创建的新进程的%CPU。我对进程数(N)运行此命令;2、4、8、16。每次报告的平均CPU百分比为..2- 100% 4- 97% 8- 50% 16 - 25%
如何通过这些结果来确定计算机的处理能力?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 2 /* define the total number of processes we want */
/* Set global
我遇到了一个奇怪的问题。到目前为止,我正在用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