我已经阅读了Cuda编程指南,但仍然不清楚warp是否会产生支持其他准备执行的warp?有什么解释或指针吗?如果是,在什么条件下产生翘曲?
AMD为每个GPU系列定义其ISA.据我所知,ISA是一个指令集架构:类似汇编的"语言".怎样称为NVidia的GPU"汇编式语言"? - PTX?是否有像AMD或Intel离线编译器这样的工具为NVidia内核生成这样的程序集?谢谢
我试图理解CUmodule在CUDA驱动程序API函数中的实际应用.
许多CUDA驱动程序API函数都有一个CUmodule句柄,但它是什么?它是一个控制驱动程序调用过程的DLL的句柄,我可以调用像具有CUDA函数名称的GetProcAddress或什么?
请简单(简单的英文首选)
我是GPU世界的新手,刚刚安装了CUDA来编写一些程序.我玩推力库但发现在将数据上传到GPU时速度太慢了.在我可怕的桌面上,主机到设备部分只有大约35MB/s.怎么回事?
环境:Visual Studio 2012,CUDA 5.0,GTX760,Intel-i7,Windows 7 x64
GPU带宽测试:

它应该具有至少11GB/s的主机到设备的传输速度,反之亦然!但事实并非如此!
这是测试程序:
#include <iostream>
#include <ctime>
#include <thrust/device_vector.h>
#include <thrust/host_vector.h>
#define N 32<<22
int main(void)
{
using namespace std;
cout<<"GPU bandwidth test via thrust, data size: "<< (sizeof(double)*N) / 1000000000.0 <<" Gbytes"<<endl;
cout<<"============program start=========="<<endl;
int now = time(0);
cout<<"Initializing h_vec...";
thrust::host_vector<double> h_vec(N,0.0f);
cout<<"time spent: "<<time(0)-now<<"secs"<<endl;
now = time(0);
cout<<"Uploading data to GPU...";
thrust::device_vector<double> d_vec = h_vec;
cout<<"time spent: "<<time(0)-now<<"secs"<<endl;
now = time(0);
cout<<"Downloading data to h_vec...";
thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());
cout<<"time spent: "<<time(0)-now<<"secs"<<endl<<endl; …Run Code Online (Sandbox Code Playgroud) 我编写了一个CUDA内核,其中每个线程都对特定的内存地址进行更新(使用int size).某些线程可能希望同时更新此地址.
CUDA如何处理这个问题?操作是否成为原子?这会以任何方式增加我的应用程序的延迟吗?如果是这样,怎么样?
我正在使用新的kepler的shuffle指令实现CUDA上的并行缩减,类似于:http://devblogs.nvidia.com/parallelforall/faster-parallel-reductions-kepler/
我在给定矩阵中搜索行的最小值,并在内核的末尾我有以下代码:
my_register = min(my_register, __shfl_down(my_register,8,16));
my_register = min(my_register, __shfl_down(my_register,4,16));
my_register = min(my_register, __shfl_down(my_register,2,16));
my_register = min(my_register, __shfl_down(my_register,1,16));
Run Code Online (Sandbox Code Playgroud)
我的块是16*16,所以一切正常,使用该代码我在同一个内核中的两个子行中获得最小值.
现在我还需要返回矩阵每行中最小元素的索引,所以我打算用"if"语句替换"min"并以类似的方式处理这些索引,我对这段代码感到困惑:
if (my_reg > __shfl_down(my_reg,8,16)){my_reg = __shfl_down(my_reg,8,16);};
if (my_reg > __shfl_down(my_reg,4,16)){my_reg = __shfl_down(my_reg,4,16);};
if (my_reg > __shfl_down(my_reg,2,16)){my_reg = __shfl_down(my_reg,2,16);};
if (my_reg > __shfl_down(my_reg,1,16)){my_reg = __shfl_down(my_reg,1,16);};
Run Code Online (Sandbox Code Playgroud)
没有cudaErrors,但内核现在返回垃圾.不过我已经解决了这个问题:
myreg_tmp = __shfl_down(myreg,8,16);
if (myreg > myreg_tmp){myreg = myreg_tmp;};
myreg_tmp = __shfl_down(myreg,4,16);
if (myreg > myreg_tmp){myreg = myreg_tmp;};
myreg_tmp = __shfl_down(myreg,2,16);
if (myreg > myreg_tmp){myreg = myreg_tmp;};
myreg_tmp = __shfl_down(myreg,1,16);
if (myreg > …Run Code Online (Sandbox Code Playgroud) 我在NVidia X Server Settings小程序和我的xorg.conf中看到对BaseMosaic的引用,但我找不到它的好描述.它是什么,它做了什么?
我在AWS上有一台带有Nvidia GRID卡K520的远程计算机,想要远程渲染3D图形.我使用Ubuntu 14.04 - 64位.远程和本地.对于远程连接和OpenGL渲染,我们使用VirtualGL和TurboVNC(*amd64.deb).
我正确安装了VirtualGL和TurboVNC,我有Nvidia驱动程序.
据我所知,VirtualGL使用display:0和TurboVNC在远程机器上使用display:1.
当我连接到远程计算机并且我想运行3D应用程序(通过vglrun)时,它给了我错误:
显示":0.0"时缺少"GLX"扩展名.
我不介意VirtualGL如何在具有TurboVNC的远程机器上工作,它如何使用显示器:0,如果没关系.
我需要设置一些东西(.conf,图形驱动程序).我试着一遍又一遍地安装它,尝试了解答,但我没有找到解决方案.
许多框架要求您的nvidia显卡具有特定的计算能力版本.
我正在开发一个使用Cuda的C++应用程序.我应该通过代码获取此信息.这样我就可以为每个图形计算能力分配所需的框架.如何在C/C++中了解我的nvidia图形的计算能力?
在阅读了这本在线书籍http://learnopengl.com/book/offline%20learnopengl.pdf之后,我脑子里开始出现一些关于如何创建更新版本的openGL的问题.根据在线阅读,显卡制造商负责创建更新版本的openGL.所以说Nvidia开发(假设)一个带有openGL版本4.3的GTX 700系列显卡.在此之后,他们决定开发900系列显卡,并对openGL的实现进行一些优化.在卡完成并进行优化后,他们将openGL的这些新优化标记为openGL 4.4.我的示例在新版本的创建方面是否正确?另外,如果是这样,那么kronos组(openGL的开发人员)实际上做了什么?他们是否有责任确保新版本的openGL符合所需规格?