我正在学习 CUDA,试图解决一些标准问题。作为示例,我使用以下代码求解二维扩散方程。但我的结果与标准结果不同,我无法弄清楚。
//kernel definition
__global__ void diffusionSolver(double* A, double * old,int n_x,int n_y)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
int j = blockIdx.y * blockDim.y + threadIdx.y;
if(i*(n_x-i-1)*j*(n_y-j-1)!=0)
A[i+n_y*j] = A[i+n_y*j] + (old[i-1+n_y*j]+old[i+1+n_y*j]+
old[i+(j-1)*n_y]+old[i+(j+1)*n_y] -4*old[i+n_y*j])/40;
}
int main()
{
int i,j ,M;
M = n_y ;
phi = (double *) malloc( n_x*n_y* sizeof(double));
phi_old = (double *) malloc( n_x*n_y* sizeof(double));
dummy = (double *) malloc( n_x*n_y* sizeof(double));
int iterationMax =10;
//phase initialization
for(j=0;j<n_y ;j++)
{
for(i=0;i<n_x;i++)
{ …Run Code Online (Sandbox Code Playgroud) 据我了解,当主机和设备之间的复制操作开始使用 cudaMemcpy 时,主机指针会自动固定。那么使用单独的 API cudAHostAlloc() 来分配固定主机内存的意义和必要性是什么?
我通常总是在谷歌上找到解决方案(这里是 80%),但不幸的是,这次情况并非如此。这就是我决定创建一个帐户的原因。
我编写了一个在不同的 Intel 和 AMD CPU 上运行的 OpenCL 代码。它也可以在 AMD RADEON HD7970 和 NVIDIA Quadro FX 1800M 上运行。然而,当我尝试在 NVIDIA K20m 上启动代码时,我收到错误 -9999 和“clEnqueueNDRangeKernel”。
最麻烦的是,错误发生在512次迭代之后(我猜512是巧合)。
我相信(但也许这只是错误-11)我已经看到了这个错误,但这是构建程序期间的错误,并且是由于“clGetEventProfilingInfo”造成的。这次所有的分析都是评论。
我正在寻找有关此错误的信息。
预先感谢您的答复。
OpenCL 版本:1.1
CUDA 版本:7.0.18
PS:准确地说我不是该系统的管理员可能会很有用。
我目前使用两个 nvidia p4 显卡。
在以前版本的 ffmpeg(3.2.0 之前)中,我可以使用选项“-gpu 0 或 1 等”来选择特定的 GPU 卡。
然而,在当前版本中,没有选择 GPU 卡的选项。
实际上,nvenc_h264.c 或 nvenc_hevc.c 中指定了“gpu”选项。
但在 nvenc.c 文件中,没有使用“gpu”选项的代码。
有什么办法可以选择特定的卡吗?
两张卡之间的负载均衡是如何实现的?
是在驱动级别完成的吗?
谢谢。
我有一个使用 GPU 并在不同机器上运行的应用程序。-arch=compute_xx -code=sm_xx目前,我根据正在运行的计算机上安装的 GPU 型号,手动向 NVCC 指定参数。
我想编写一个自动化程序,能够从主机中提取这些值,这样我就不需要手动指定它们。有没有办法真正自动做到这一点?
我的集群同时配备了 Nvlink 和 PCIe。所有GPU(V100)都可以通过PCIe或NvLink直接通信。据我所知,PCIe交换机和Nvlink都可以支持使用CUDA的直接链接。
现在,我想比较 PCIe 和 NvLink 的点对点通信性能。但是,我不知道如何指定一个,似乎CUDA总是会自动指定一个。有人可以帮助我吗?
我正在调整这张测试图片的大小:
Mat im = Mat::zeros(Size(832*3,832*3),CV_8UC3);
putText(im,"HI THERE",Point2i(10,90),1,7,Scalar(255,255,255),2);
Run Code Online (Sandbox Code Playgroud)
按标准
cv::resize(im,out,Size(416,416),0,0,INTER_NEAREST);
Run Code Online (Sandbox Code Playgroud)
并通过 CUDA 版本的调整大小:
static void gpuResize(Mat in, Mat &out){
double k = in.cols/416.;
cuda::GpuMat gpuInImage;
cuda::GpuMat gpuOutImage;
gpuInImage.upload(in);
const Size2i &newSize = Size(416, in.rows / k);
//cout << "newSize " << newSize<< endl;
cuda::resize(gpuInImage, gpuOutImage, newSize,INTER_NEAREST);
gpuOutImage.download(out);
}
Run Code Online (Sandbox Code Playgroud)
测量时间表明 cv::resize 快了大约 25 倍。我究竟做错了什么?我在 GTX1080ti 显卡上,也在 Jetson NANO 上观察到同样的情况。可能有任何替代方法可以比使用 nvidia 硬件加速的 cv::resize 更快地调整图像大小?
我正在尝试运行 Nvidia 的 StyleGan2。我创建了一个新环境,但未通过提供的自述文件中规定的这项检查。
特别是,当我运行它时,我收到您在问题标题中看到的错误。我查了一下,解决方案表面上是将此路径添加到环境变量中
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
Run Code Online (Sandbox Code Playgroud)
bin我正在尝试这样做,但我的文件夹中没有VC!我只有include和lib,全新安装的 Visual Studio。
我们正在尝试使用张量流训练我们的模型以进行对象识别。由于图像太多(100GB),我猜我们当前的GPU服务器(1*2080Ti)无法工作。我们可能需要购买一个更强大的,但我不知道如何估计我们需要多少 GPU 内存。有某种方法来估计需求吗?谢谢!
我有一个 Nvidia 1080Ti GPU,我想在 WSL2 上运行 Pytorch,但出现错误“在您的系统上找不到 NVIDIA 驱动程序”,但我确实安装了 NVIDIA 驱动程序。这是我做的步骤。
我安装了 WSL2,并从 GeForce 驱动程序在 WSL 上为 Cuda 安装了 NVIDIA 驱动程序:https : //developer.nvidia.com/cuda/wsl/download
我用 Python 3.7 激活了一个干净的 conda 环境
然后我运行 Pytorch 安装: conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
然后出现错误,说找不到 NVIDIA 驱动程序。我在 Pytorch 论坛上看到一个帖子,有人确实让它在类似的设置中运行:Ubuntu 18.04 + Conda + Pytorch https://discuss.pytorch.org/t/found-no-nvidia-driver-on-your -system-but-its-there/35063/4
我没有多个 GPU,所以我不知道如何在 WSL2 中识别我的驱动程序。感谢您的任何想法!