我知道AMD GPU上的单块GPU内存有128MB的限制.Nvidia GPU有类似的限制吗?
在装有Windows 7 OS的计算机中,我有来自此供应商的三个版本的OpenCL SDKS:
我与他们每个人建立我的应用程序。作为输出,我有三个不同的二进制文件。例如:my_app_intel_x86,my_app_amd_x86,my_app_nvidia_x86
此二进制文件与此不同:
我可以只使用一个SDK并检查平台的运行时间吗?
我不知道cuda不支持引用参数.我的程序中有以下两个功能:
__global__ void
ExtractDisparityKernel ( ExtractDisparity& es)
{
es ();
}
__device__ __forceinline__ void
computeAdjacentValue (int x1, int y1, int x2, int y2, float& value )
{ ....
}
Run Code Online (Sandbox Code Playgroud)
给定全局函数,编译器报告错误:/home/lv/pcl-trunk/gpu/kinfu_large_scale/src/cuda/estimate_combined.cu(959):错误:全局例程不能有引用参数
我搜索了一些解决方案.有人说不允许这样做.但设备功能不会报告此类错误.我很困惑,cuda是否支持参考论证.或者编译器被某种方式欺骗了.
任何人都可以给出这个问题的完整答案:允许参考但不允许参考?
我正在研究一台"fujitsu"机器.它安装了2个GPU:Quadro 2000和Tesla C2075.Quadro GPU有1 GB RAM,Tesla GPU有5GB.(我使用nvidia-smi -q的输出检查).当我运行nvidia-smi时,输出显示2个GPU,但特斯拉显示屏显示为关闭.我正在运行一个内存密集型程序,并希望使用5 GB的RAM,但每当我运行程序时,它似乎都在使用Quadro GPU.有没有办法在程序中使用2中的特定GPU?特斯拉GPU是否被"禁用"意味着它的驱动程序没有安装?
如此共享内存阵列默认值问题中所述,共享内存未初始化,即可以包含任何值.
#include <stdio.h>
#define BLOCK_SIZE 512
__global__ void scan(float *input, float *output, int len) {
__shared__ int data[BLOCK_SIZE];
// DEBUG
if (threadIdx.x == 0 && blockIdx.x == 0)
{
printf("Block Number: %d\n", blockIdx.x);
for (int i = 0; i < BLOCK_SIZE; ++i)
{
printf("DATA[%d] = %d\n", i, data[i]);
}
}
}
int main(int argc, char ** argv) {
dim3 block(BLOCK_SIZE, 1, 1);
dim3 grid(10, 1, 1);
scan<<<grid,block>>>(NULL, NULL, NULL);
cudaDeviceSynchronize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是为什么在这段代码中它不是真的,而且我不断地将共享内存归零?
DATA[0] = 0
DATA[1] …Run Code Online (Sandbox Code Playgroud) 我有一个CUDA函数,可以计算GPU上的局部二进制模式.基本上,LBP是对图像的像素的计算,其中任何给定像素(i,j)的值取决于其8个邻居的强度.
到目前为止一切顺利,代码如下:
//The kernel
__global__ void LBP(unsigned char *in, unsigned char *out, const int w, const int h)
{
const unsigned int i = (blockIdx.x * blockDim.x) + threadIdx.x;
//Don't do edges!
if(
i < w //first row
|| i >= (w * (h - 1)) // last row
|| !(i % w) // first column
|| (i % w + 1 == w) // last column
)
{
out[i] = 0;
return;
}
unsigned char
code = …Run Code Online (Sandbox Code Playgroud) 服务器已设置两张NVIDIA K20m卡,但已ECC启用.我观察到Volatile GPU-Utilization使用该nvidia-smi -a命令很高,即使卡中没有运行任何计算任务.该K20m只是用于计算.我已经搜查Google,并检查了以下链接:https://devtalk.nvidia.com/default/topic/539632/k20-with-high-utilization-but-no-compute-processes-/和https://开头devtalk .nvidia.com /默认/主题/ 464744 /如何对禁用-启用- ECC-ON-c2050- /
它似乎ECC总是一个不好的功能,所以它始终设置为disabled.那么真正意义ECC何在?我只是该服务器的commont用户,所以我没有权利使用该命令nvidia-smi -e 0设置ECC为禁用.普通用户是否可以将其设置ECC为禁用?
当我们关闭时有ECC什么影响?我们什么时候打开它?何时关闭?
我正在使用OpenCL/OpenGL Interop开发一个基本的光线跟踪器.我在内核中存在一些问题,这些内核共享工作组内共享的本地内存.
这是内核:
__kernel void ComputeDirectionalShadowTexture(
write_only image2d_t shadowTexture,
read_only image2d_t positionTexture,
__constant float3* lightDirection, __constant float4* spheres,
)
{
__local bool* shadowReduce[2];
__local size_t idX, idY, idZ, localID;
idX = get_global_id(0);
idY = get_global_id(1);
idZ = get_global_id(2);
localID = get_local_id(2);
//...Read Textures
//...Perform Computation
//...Write results
if(shadowReduce[localID])
write_imagef(shadowTexture, threadCoord.xy, (float4)(1.0f, 0.0f, 0.0f, 1.0f));
}
Run Code Online (Sandbox Code Playgroud)
运行此时,就好像get_local_id()函数永远不会返回0(或只返回1).
我希望问题与我调用内核的方式有关:
size_t numGlobal[3] =
{
rBuffer->textureWidth,
rBuffer->textureHeight,
numSpheres
};
size_t numLocal[3] = { 1, 1, numSpheres};
cl_event execution;
//Execute kernel
clError = clEnqueueNDRangeKernel
( …Run Code Online (Sandbox Code Playgroud) 谁能告诉我CUDA内核中的以下代码有什么问题:
__constant__ unsigned char MT[256] = {
0xde, 0x6f, 0x6f, 0xb1, 0xde, 0x6f, 0x6f, 0xb1, 0x91, 0xc5, 0xc5, 0x54, 0x91, 0xc5, 0xc5, 0x54,....};
typedef unsinged int U32;
__global__ void Kernel (unsigned int *PT, unsigned int *CT, unsigned int *rk)
{
long int i;
__shared__ unsigned char sh_MT[256];
for (i = 0; i < 64; i += 4)
((U32*)sh_MT)[threadIdx.x + i] = ((U32*)MT)[threadIdx.x + i];
__shared__ unsigned int sh_rkey[4];
__shared__ unsigned int sh_state_pl[4];
__shared__ unsigned int sh_state_ct[4];
sh_state_pl[threadIdx.x] = PT[threadIdx.x];
sh_rkey[threadIdx.x] …Run Code Online (Sandbox Code Playgroud) cuDNN安装手册说
所有平台
将cuDNN存档解压缩到您选择的目录,如下所示.然后按照以下特定于平台的说明进行操作.
LINUX
cd export LD_LIBRARY_PATH =`pwd`:$ LD_LIBRARY_PATH
通过将-I添加到编译行并将-L -lcudnn添加到链接行,添加到构建和链接过程.
看来,它只是增加了pwd到LD_LIBRARY_PATH,所以我想只是更换文件pwd会做更新.
但似乎并不那么简单,因为在我做完这件事之后,我得到了Theano的投诉
cuDNN版本太旧了.更新到v5,是3007.