我的应用程序需要双精度计算.根据我在谷歌上发现的,我应该添加一个标志"-arch sm_13"或"-arch sm_20".
Q1:"-arch sm_13"和"-arch sm_20"有什么区别?
Q2:"-arch sm_13"和"-arch sm_20"之间的性能是否存在差异?
我的GPU:GTX 570.
谢谢.
是否可以glutMainLoop()用简单的循环(例如while或for)替换,并在此循环中调用所有回调?
我做了这个,图片显示正常,但窗口(显示图片)没有响应(无法移动).
是否glutMainLoop()调用回调相比吗?
我有问题包括<cuda_runtime.h>在.cpp文件中.错误:Cannot include file: cuda_runtime.h: No such file or directory.
我试图从Rob Farber(http://www.drdobbs.com/architecture-and-design/222600097?pgno=1)中编写代码.
我之前编译过几个cuda代码,但<cuda_runtime.h>总是包含在.cu文件中.
我正在使用VS 2008 Express.
问:我是否必须以某种方式将VS链接起来以便知道在哪里寻找<cuda_runtime.h>?
当CUDA内核包含这样的条件代码时:
if (statement1)
calculation1;
else if (statement2)
calculation2;
else if (statement3)
calculation3;
Run Code Online (Sandbox Code Playgroud)
这是否意味着计算将被序列化?
这是矩阵索引的正确表达式(dim3 threadBlock =(A,B,1),dim3 blockGrid =(C,D,1),其中A,B,C,D是某些数字)?
int i = (blockIdx.y * gridDim.x + blockIdx.x) * blockDim.x + threadIdx.x;
int j = (blockIdx.x * gridDim.y + blockIdx.y) * blockDim.y + threadIdx.y;
Run Code Online (Sandbox Code Playgroud) 问题:
我有4个矩阵(64x64)的单精度数.需要做如下计算:
R = A * sin(B) + C * cos(D)
Run Code Online (Sandbox Code Playgroud)
理念:
加快计算使用共享内存.由于每个线程块都有(在我的GPU的情况下)16KB共享内存并且float的大小为4,因此可以在共享内存中存储4000个浮点数.因此,对于每个矩阵,使用1000个元素,每个维度为31个元素.
所以每个矩阵应分成16个子矩阵(16x16).
dim3 dimBlock(16, 16, 1)
dim3 dimGrid(4, 4, 1)
Run Code Online (Sandbox Code Playgroud)
核心:
int Tx = threadIdx.x;
int Ty = threadIdx.y;
int Bx = blockIdx.x;
int By = blockIdx.y;
int idx = Bx * blockDim.x + Tx;
int idy = By * blockDim.y + Ty;
__shared__ float s_A[16*16];
__shared__ float s_B[16*16];
__shared__ float s_C[16*16];
__shared__ float s_D[16*16];
// I am not sure how to write this part
s_A[(Tx * blockDim.x …Run Code Online (Sandbox Code Playgroud) Q0:
是否由cuComplex.h支持exp()?
Q1:
如何写A = B*exp(i*C),其中A,B,C是相同大小的实数数组?这是正确的吗?
主要:
cuComplex A;
float B;
cuComplex c;
Run Code Online (Sandbox Code Playgroud)
核心:
c[idx] = ( 0, C[idx] );
A[idx] = B[idx] * exp( c[idx] );
Run Code Online (Sandbox Code Playgroud)
Q2:
cuComplex包含2个浮点数,这意味着我必须为原始矩阵分配2倍的内存.有没有办法创造纯虚数?