愚蠢的问题,但我无法理解如何在 MSVS (MSVC) 中为 nvcc 设置 c++14 标准用法。我试图在命令行中添加“-std=c++14”,在“附加编译器选项”中添加“/std:c++14”,但得到了
nvcc warning : The -std=c++14 flag is not supported with the configured host compiler. Flag will be ignored.
如何正确设置此选项?
所以我正在研究矩阵上的归约函数:我需要在矩阵中找到最大值。我已经实现了一个函数来获取数组的最大值并将其转换为矩阵版本应该很简单,但我无法让它工作。我想知道这是否是正确的方法。您可以在下面找到两个版本的代码:
对于数组:
__global__
void reduce_kernal_shared_mem(float *d_in, float *d_out){
int indx = blockDim.x * blockIdx.x + threadIdx.x;
int tindx = threadIdx.x;
extern __shared__ float sh_in[];
sh_in[tindx] = -99999.0f;
sh_in[tindx] = d_in[indx];
__syncthreads();
for(int i = blockDim.x / 2; i > 0; i >>= 1){
if(tindx < i){
sh_in[tindx] = fmax(sh_in[tindx], sh_in[tindx + i]);
}
__syncthreads();
}
if(tindx == 0){
d_out[blockIdx.x] = sh_in[0];
}
}
void reduce(float *d_in, float *d_int, float *d_out, const int ARRAY_SIZE, bool is_shared){
if(!is_shared){
reduce_kernal<<<1024, 1024>>>(d_in, d_int);
reduce_kernal<<<1, …Run Code Online (Sandbox Code Playgroud) 我从 CUDA 开始,编写了两个内核进行实验。Whey 都接受 3 个指向 n*n(矩阵仿真)和 n 数组的指针。
__global__
void th_single_row_add(float* a, float* b, float* c, int n) {
int idx = blockDim.x * blockIdx.x * n + threadIdx.x * n;
for (int i = 0; i < n; i ++) {
if (idx + i >= n*n) return;
c[idx + i] = a[idx + i] + b[idx + i];
}
}
__global__
void th_single_col_add(float* a, float* b, float* c, int n) {
int idx = blockDim.x * blockIdx.x …Run Code Online (Sandbox Code Playgroud) 我在google colaboratory上练习OpenCV,因为我不知道如何在GPU上使用OpenCV,当我在我的硬件上运行OpenCV时,它需要大量CPU,所以我去了Google colaboratory。我的笔记本的链接在这里。
如果你不想看,代码如下:
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
_, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow('img', img)
k = cv2.waitKey(30) & 0xff
if k==27:
break
cap.release()
Run Code Online (Sandbox Code Playgroud)
相同的代码在我的 PC 上运行良好,但在 Google Colaboratory 上则不然。错误是:
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-5-0d9472926d8c> in <module>()
6 while True:
7 _, img = cap.read() …Run Code Online (Sandbox Code Playgroud) 我有使用 nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 构建的应用程序的基础映像。我必须在具有 cuda 版本的集群中运行该应用程序
NVIDIA-SMI 460.32.03 驱动程序版本:460.32.03 CUDA 版本:11.2。
我的应用程序没有为我提供 GPU 训练模型的正确预测结果(它返回基本分数作为预测输出)。但是,它能够为 CPU 训练模型返回准确的预测结果。所以,我推测它是两者之间的CUDA版本不兼容问题。我想知道 CUDA 版本 11.2 是否可以与符合 CUDA 10.2 的应用程序良好配合。
我的cuda版本显示在这里。 nvcc -V 输出 nvidia-smi 输出
我基本上想安装apex。我首先使用命令
conda install pytorch=1.10.1 cudatoolkit=11.1 -c pytorch
Run Code Online (Sandbox Code Playgroud)
用cuda安装torch,这个版本的cudatoolkit工作正常并且
torch.version.cuda
Run Code Online (Sandbox Code Playgroud)
正确显示预期输出“11.1”并且
torch.cuda.is_available()
Run Code Online (Sandbox Code Playgroud)
返回 True。然而,当我稍后尝试安装 apex 时,这不起作用,因为我的 nvcc -V 的版本如上所示是 11.4,但 cudatoolkit 是 11.1。
然后我使用命令
conda install pytorch cudatoolkit=11.4 -c pytorch
Run Code Online (Sandbox Code Playgroud)
安装正确的 cudatoolkit 版本 11.4。这样做之后,torch版本变为1.9.1。然而,
torch.version.cuda
Run Code Online (Sandbox Code Playgroud)
变为无并且
torch.cuda.is_available()
Run Code Online (Sandbox Code Playgroud)
返回 False。
我还尝试了 cudatoolkit=11.4 和 torch 版本 1.9.1 和 1.12.1,但它们都不起作用。
我希望我的 GPU 能够被正确检测到。我应该使用哪个版本的 torch 和 cudatoolkit?或者这里还有什么问题吗?多谢。
我想逐渐计算整个内核执行的线程执行次数.是否有本地计数器或有没有其他方法可以做到这一点?我知道保留一个全局变量并且每个线程的增量都不会起作用,因为全局内存中的变量不保证线程的同步访问.
我正在查看不同CUDA计算功能的以下最大值:
如出现在这里.嗯,它看起来像CUDA 3.5及以上,至少1 x 3> 2.这意味着虽然单个线程最多可以使用255个寄存器,但如果有太多线程尝试这样做,则会发生寄存器溢出.我的解释是否正确?或者说图1.不是真的正确,每个线程真的有64个寄存器吗?
我正在尝试使用ILGPU来扰乱我的GPU上的CUDA。
当我尝试加载内核并向其传递一些数据时:
var krnl = gpu.LoadAutoGroupedStreamKernel<Index1, ArrayView<byte>, int[]>(krnCopyStringToCard);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误,这确实令人困惑:
类型“int[]”必须是不可为 null 的值类型才能将其用作参数...
查看可为空的文档(对我来说是新的),似乎int 可以为空,但前提是您如此声明。我绝对不会这样做,那有什么用呢?
我对这个基本的CUDA代码感到烦恼.
我有一个char**平面的2d密码数组,我目前的实现是CUDA只是迭代这个列表并显示密码.但是,当我去显示它们时,我只是得到"(NULL)".我不太清楚为什么会这样.有人可以解释它发生了什么吗?
主要:
char ** pwdAry;
pwdAry = new char *[numberOfPwd];
//pwdAry given some values (flat 2d array layout)
const int pwdArySize = sizeof(pwdAry);
dim3 grid(gridSize,gridSize);
dim3 block(blockSize,blockSize);
searchKeywordKernel << <grid, block >> >(pwdAry);
return EXIT_SUCCESS;
Run Code Online (Sandbox Code Playgroud)
CUDA:
__global__ void searchKeywordKernel(char **passwordList)
{
int x = threadIdx.x + blockIdx.x * blockDim.x;
int y = threadIdx.y + blockIdx.y * blockDim.y;
int pitch = blockDim.x * gridDim.x;
int idx = x + y * pitch;
int tidy = idx / pitch; …Run Code Online (Sandbox Code Playgroud)