我使用 NVIDIA Profiler 测试了一个内核,它输出以下内容:

我们启动了具有 256 个块和 256 个线程的内核。据我了解,该图显示了三个部分,一个用于 Warps ,一个用于寄存器,一个用于共享内存,每个部分都有一个计算出的“块限制”,其中寄存器部分中的部分是最小且最有限制的值。显然,内核是寄存器绑定的,我们只能在一个 SM 上同时启动 4 个块。这就是探查器所说的。我彻底问自己以下事情:
一块 GTX 780 Ti,一个 SM 中有 192 个核心,怎么可能同时启动 4 个块 * 256 个线程 = 1024 个线程?在 CUDA 术语中,“同时”是什么意思?这是否意味着可以在调度程序中同时调度 4 个块,并且 SM 同时从一个块的扭曲中以锁步方式执行指令。同时这个词有点混乱?
多谢
dim3 block(4, 2)
dim3 grid((nx+block.x-1)/block.x, (ny.block.y-1)/block.y);
Run Code Online (Sandbox Code Playgroud)
我在专业 CUDA C 编程第 53 页中找到了这段代码。它是矩阵乘法的一个简单示例。nx是列数,ny是行数。
您能解释一下网格大小是如何计算的吗?为什么block.x先加上nx然后减去1?
有预览 ( https://books.google.com/books?id=_Z7rnAEACAAJ&printsec=frontcover#v=onepage&q&f=false ),但缺少第 53 页。
我正在寻找一种快速方法来减少排列为大向量的多个相同长度的块。我有 N 个子数组(连续元素),它们排列在一个大数组中。每个子数组都有固定的大小:k。所以整个数组的大小是:N*K
我正在做的是调用内核N次。每次它计算子数组的减少如下:我将迭代大向量中包含的所有子数组:
for(i=0;i<N;i++){
thrust::device_vector< float > Vec(subarray, subarray+k);
float sum = thrust::reduce(Vec.begin(), Vec.end(), (float)0, thrust::plus<float>());
printf("sum %f\n",sum);
}
Run Code Online (Sandbox Code Playgroud)
对于纯 CUDA 我会这样做(伪代码):
for(i=0;i<N;i++){
reduction_kernel(subarray)
}
Run Code Online (Sandbox Code Playgroud)
您是否有另一种解决方案来一次性执行连续子数组的缩减?使用纯 CUDA 或 Thrust
我经常需要录制屏幕并将其编辑成演示视频。
迄今为止我发现的最好的软件是 OBSproject.com,这是一款免费、开源、非常灵活的流媒体和屏幕录制软件。
我非常希望能够以比我的物理显示器(仅 1080p)更高的分辨率(例如:4K)进行录制,然后在编辑时无损放大。
有哪位高手知道如何做到这一点吗?创建这些软件演示视频时将会有巨大的帮助!如果答案是另一个捕获软件或一些 FFMPEG 魔法,我就失望了。
ps 我已经遇到过Nvidia 设置“DSR Factors”,但是在测试时,看起来它是一个有损的 UPSCALE,而不是真正的 4k。
我正在尝试为我想要部署的 python 脚本构建一个 docker 映像。这是我第一次使用 docker,所以我可能做错了什么,但我不知道是什么。
我的系统:
OS: Ubuntu 20.04
docker version: 19.03.8
Run Code Online (Sandbox Code Playgroud)
我正在使用这个 Dockerfile:
# Dockerfile
FROM nvidia/cuda:11.0-base
COPY . /SingleModelTest
WORKDIR /SingleModelTest
RUN nvidia-smi
RUN set -xe \ #these are just to make sure pip and git are installed to install the requirements
&& apt-get update \
&& apt-get install python3-pip -y \
&& apt-get install git -y
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements/requirements1.txt
RUN pip3 install -r requirements/requirements2.txt #this is where it fails …Run Code Online (Sandbox Code Playgroud) 我想知道为什么它们具有相同的内存地址,如果我没记错的话,每个线程都有一个自己的已创建变量的副本,这样:
__global__ void
Matrix_Multiplication_Shared(
const int* const Matrix_A,
const int* const Matrix_B,
int* const Matrix_C)
{
const int sum_value = threadIdx.x;
printf("%p \n", &sum_value);
}
Run Code Online (Sandbox Code Playgroud)
输出:
我正在考虑一个线程块的情况,例如有 2 个或更多线程。
我有一台配备1060 GPU 的笔记本电脑,安装了 Ubuntu 20.04。我已经安装了nvidia-driver-460 + cuda 11.2并一直工作到今天。我今天尝试安装 ROS,在按照此链接添加源代码和密钥后,它不允许我安装 ROS,说某些软件包有unmet dependencies。之后我发布了apt autoremove并删除了nvidia 驱动程序和cuda。
我仍然无法安装 ROS,现在尝试安装也apt install nvidia-driver-460可以。这是与命令输出类似的unmet dependencies输出sudo ubuntu-drivers autoinstallapt install
Reading package lists... Done
Building dependenc y tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages …Run Code Online (Sandbox Code Playgroud) 我在理解 cuda 和 docker 生态系统时遇到问题。
在主机(ubuntu 22.04)服务器上,我想生成多个机器学习 Jupyter 笔记本。
如果我在主机 ubuntu 中仅安装 Nvidia 驱动程序就足够了,如下所示:
sudo apt-get install linux-headers-$(uname -r)
DISTRIBUTION=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g')
echo $DISTRIBUTION
wget https://developer.download.nvidia.com/compute/cuda/repos/$DISTRIBUTION/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-drivers
sudo reboot
#After reboot verify if the CUDA driver is installed:
nvidia-smi
Run Code Online (Sandbox Code Playgroud)
然后cuda像这样安装在容器中:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
sudo apt-get update
sudo apt-get -y install …Run Code Online (Sandbox Code Playgroud) 我的任务是编写一个通过 OpenMP 卸载到 GPU 的程序。目前我使用 Intel oneAPI DPC++ 编译器编译我的代码icpxv2022.1.0 编译代码,目标是在后端使用 NVIDIA Tesla V100。请在下面找到我的相关部分Makefile:
MKLROOT = /lustre/system/local/apps/intel/oneapi/2022.2.0/mkl/latest
CXX = icpx
INC =-I"${MKLROOT}/include"
CXXFLAGS =-qopenmp -fopenmp-targets=spir64 ${INC} --gcc-toolchain=/lustre/system/local/apps/gcc9/9.3.0
LDFLAGS =-qopenmp -fopenmp-targets=spir64 -fsycl -L${MKLROOT}/lib/intel64
LDLIBS =-lmkl_sycl -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lsycl -lOpenCL -lstdc++ -lpthread -lm -ldl
${EXE}: ${OBJ}
${CXX} ${CXXFLAGS} $^ ${LDFLAGS} ${LDLIBS} -o $@
Run Code Online (Sandbox Code Playgroud)
该代码编译时没有错误和警告,但我不完全确定它在运行时确实使用了 GPU。