我已经包含了主机程序的主要部分,我怀疑这里不正确:
我的指针还不是很好,并且认为我可能错误地分配了一些变量.
这是内核程序,它应该让我知道我的程序正在尝试做什么:
const char *KernelSource = "\n"
"__kernel void sumElements( \n"
" __global float* input, \n"
" __global float output, \n"
" __global int N) \n"
"{ \n"
" int i = get_global_id(0); \n"
" if(i < N) \n"
" output += input[i]; \n"
"} \n"
"\n";
Run Code Online (Sandbox Code Playgroud)
也许这会导致错误,因为我从未尝试过SIMT写入一个变量,如上所述.有可能做这样的事吗?我需要得到数组中所有元素的总和.
Mesa是否使用CPU进行渲染是真的吗?A已阅读有关Mesa的内容,但仍无法理解它的真正工作原理
我已经实现了这个代码:http://www.cuvilib.com/Reduction.pdf,以便计算矩阵元素的总和.
但是在GPU中运行速度比在CPU中慢得多.
我有i7处理器和NVIDIA GT 540M显卡.
是应该是这样还是其他什么?
编辑:我在Ubuntu 13.04中使用上面代码的第3版,我使用Eclipse Nsight编译它.矩阵的大小为2097152个元素.它在3.6毫秒内执行,而CPU版本在1.0毫秒左右.以下是整个代码:
#include <stdio.h>
#include <stdlib.h>
#include <thrust/sort.h>
#include <sys/time.h>
#include <omp.h>
#include <iostream>
#include <algorithm>
#define MIN(a,b) (((a)<(b))?(a):(b))
static const int WORK_SIZE = 2097152;
int find_min(int *a,int length){
int min = a[0];
for (int i=1;i<length;i++)
if (a[i]<min)
min=a[i];
return min;
}
__global__ static void red_min(int *g_idata,int *g_odata) {
extern __shared__ int sdata[];
unsigned int tid = threadIdx.x;
unsigned int i = blockIdx.x * blockDim.x + threadIdx.x;
sdata[tid]= g_idata[i]; …Run Code Online (Sandbox Code Playgroud) 我如何实现以下链接中给出的代码的第7版:http :
//www.cuvilib.com/Reduction.pdf
,其输入数组的大小为任意数,换句话说,不是2的幂。
我想知道如果GPU经过修改或编程就可以像CPU一样运行.如果有办法,我也想知道如何做到这一点.原因是,有时我会做那种东西作为实验,只是为了好玩.另外,如果它不是一个大麻烦,那么购买昂贵的处理器只是为了获得更好的性能要好得多.我通常不需要我的GPU,只因为我用我的电脑做最简单的事情.我的另一台电脑,这是一个略有不同的故事(因为我用它来播放视频),但你明白了.
我想知道最新的CUDA版本8.0是否支持我的电脑中的GPU,即GeForce GTX 970和Quadro K4200(双GPU系统); 我在网上找不到这些信息.
一般来说,如何找到CUDA版本,特别是新发布的版本,是否支持特定的Nvidia GPU?
谢谢!
https://developer.nvidia.com/sites/default/files/akamai/tools/files/PerfKit_4_5_User_Guide.pdf
NVIDIA PerfKit SDK允许图形开发人员访问底层NVIDIA GPU
性能计数器和NVIDIA 驱动程序计数器。
我想了解这些计数器的含义吗?它们是某种硬件还是软件?他们在做什么?
他们如何对我有帮助?请举例说明如何使用它们。
我必须使用Nvidia perfkit来确定某些处理机器人技术的软件的性能。
我正在考虑购买一台运行“ Tensorflow GPU”版本的笔记本电脑。MX150 2GB未在与CUDA兼容的GPU列表中列出。这是否意味着它不能运行“ Tensorflow GPU”版本,而只能运行标准Tensorflow版本?
我想使用cupy测试浮点数是否为正,例如:
import cupy as cp
u = cp.array(1.3)
u < 2.
>>> array(True)
Run Code Online (Sandbox Code Playgroud)
我的问题是此操作非常缓慢:
%timeit u < 2.计算机上的时间为26微秒。它比我在CPU中获得的数量级大几个数量级。我怀疑这是因为您必须将其强制转换为CPU ...
我正在尝试找到一种更快的方法来执行此操作。
谢谢 !
编辑以澄清
我的代码是这样的:
import cupy as cp
n = 100000
X = cp.random.randn(n) # can be greater
for _ in range(100): # There may be more iterations
result = X.dot(X)
if result < 1.2:
break
Run Code Online (Sandbox Code Playgroud)
并且似乎此代码的瓶颈(为此n)是对的评估result < 1.2。它仍然比在CPU上快得多,因为dot成本更低。
我只是读了这个文档:这个文档
我只是向下滚动,然后停在具有以下代码的示例程序1中:
!!ARBvp1.0
ATTRIB pos = vertex.position;
PARAM mat[4] = { state.matrix.mvp };
# Transform by concatenation of the
# MODELVIEW and PROJECTION matrices.
DP4 result.position.x, mat[0], pos;
DP4 result.position.y, mat[1], pos;
DP4 result.position.z, mat[2], pos;
DP4 result.position.w, mat[3], pos;
# Pass the primary color through w/o lighting.
MOV result.color, vertex.color;
END
Run Code Online (Sandbox Code Playgroud)
然后我才意识到“将代码放在哪里?”。所以我搜索了“如何组装ARB组件?” 或“如何使用ARB程序集?”。绝对找不到任何东西。
最后我在这里有一个问题:
我也用Linux Mint 18.3 Cinnamon 64位