为了理解如何确保对齐要求得到满足,我多次阅读以下文章,从OpenCL p.no:157中的异构计算一书.这显示了如何为图像卷积中的问题填充填充(假设工作组大小为16 x 16).
对齐记忆访问
NVIDIA和AMD GPU的性能均受益于全局内存中的数据对齐.特别是对于NVIDIA,在128字节边界上对齐访问和访问128字节段将理想地映射到存储器硬件.但是,在这个例子中,16宽工作组将只访问64字节段,因此数据应该对齐到64字节的地址.这意味着每个工作组访问的第一列应该从64字节对齐的地址开始.在此示例中,使边框像素不生成值的选择确定所有工作组的偏移量将是工作组维度的倍数(即,对于16 x 16工作组,工作组将开始访问列N*16处的数据) .为确保每个工作组正确对齐,
1 - 任何人都可以帮助我理解填充每个工作组访问的第一列后是如何从64字节对齐的地址开始的(上述段落中提到的要求,对吧?)?
2 - 该图也是正确的声明:对于16 x 16工作组,工作组将开始访问N*16列的数据.
如果正确,图中所示的工作组1,2应该开始访问第1x16列的数据,这与图中所示的相反.我完全糊涂了!! :(
更新: Q-2现在对我来说很清楚. 实际上图中显示的工作组是2,1(在opencl惯例中,第一列),所以它完全正确:2x16 = 32而不是我想的1x16.
但问题不是.1仍然没有答案.

我想开始说我对OpenCL/GPU编程一无所知,但我是一名高级C#(通用.Net)程序员而不用担心C++,我想学习OpenCL/GPU编程......我的问题是...我从哪里开始?!?我应该下载什么?!?有没有办法在Visual Studio上编程OpenCL/GPU(在C#上)!?!喜欢...你好世界的东西......全部
我已经阅读了以下和大多数NVIDIA手册和其他内容.我去年也参加了GTC的论文和会谈.
我知道最新的GPU Computing Gems Emerald Edition但尚未阅读.
您会推荐哪些其他书籍和资源?例如,我确信80年代的第一波数据并行编程(连接机器等)有一些很棒的内容.我知道对这一代硬件的数据并行算法进行了大量研究.
跟进... 30/Mar/2011
我还发现GPU Gems第1-3册有一些关于GPU计算的章节,而不仅仅是图形.它们可以在线免费获得,http://developer.nvidia.com/object/gpu_gems_home.html.我还没有机会读它们.
我今天早些时候(在TechCrunch.com上)遇到了这个概念证明,并且对于他们如何设法完成最终结果感到震惊和好奇.他们表示他们不使用webGL或任何插件,但他们能够直接与GPU交互并使用Javascript以高达60 fps的速度呈现3D视觉效果.任何想法如何做到这一点,或如何在不使用插件的情况下从Javascript访问GPU?
网站地址是:famo.us
ps:尝试使用箭头键将方向移向远方!
我的系统有显卡.我不玩游戏.
我想编写一些高性能计算的东西以获得乐趣.
我可以使用JULIA lang来利用我的硬件吗?
假设我们生成了自己的训练数据(例如,从某个扩散过程中采样并计算了一些感兴趣的量),并且我们拥有自己的CUDA例程,称为generate_data,该例程在GPU内存中为给定的一组输入生成标签。
因此,我们处于一种特殊的设置中,可以“在线”方式生成任意数量的训练数据(在每个批次迭代中,我们都调用generate_data例程以生成新批次并丢弃旧批次)。
由于数据是在GPU上生成的,有没有办法使TensorFlow(Python API)在训练过程中直接使用它?(例如填充一个占位符)这样,这样的管道将是有效的。
我的理解是,当前您需要在这样的设置中将数据从GPU复制到CPU,然后让TensorFlow将数据再次从CPU复制到GPU,这在执行不必要的复制时非常浪费。
编辑:如果有帮助,我们可以假定CUDA例程是使用Numba的CUDA JIT编译器实现的。
当我在控制台登录时,我的OpenCL程序可以找到GPU设备,但是当我使用ssh远程登录时却找不到.此外,如果我在ssh会话中以root身份运行程序,程序可以找到GPU.
这款电脑是配备GeForce 9400 GPU的Snow Leopard Mac.
如果我从控制台或以root身份运行程序(见下文),输出如下(注意"GeForce 9400"行):
2 devices found
Device #0 name = GeForce 9400
Device #1 name = Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz
Run Code Online (Sandbox Code Playgroud)
但如果只是我,在ssh上,没有GeForce 9400条目:
1 devices found
Device #0 name = Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz
Run Code Online (Sandbox Code Playgroud)
我想在GPU上测试我的代码,而不必是root.那可能吗?简化的GPU查找程序如下:
#include <stdio.h>
#include <OpenCL/opencl.h>
int main(int argc, char** argv) {
char dname[500];
size_t namesize;
cl_device_id devices[10];
cl_uint num_devices;
int d;
clGetDeviceIDs(0, CL_DEVICE_TYPE_ALL, 10, devices, &num_devices);
printf("%d devices found\n", num_devices);
for (d = 0; d < …Run Code Online (Sandbox Code Playgroud) 我有一个用PyTorch编写的神经网络,它a在GPU上输出一些Tensor .我想继续a使用高效的TensorFlow层进行处理.
据我所知,唯一的方法是a从GPU内存转移到CPU内存,转换为numpy,然后将其输入TensorFlow.一个简化的例子:
import torch
import tensorflow as tf
# output of some neural network written in PyTorch
a = torch.ones((10, 10), dtype=torch.float32).cuda()
# move to CPU / pinned memory
c = a.to('cpu', non_blocking=True)
# setup TensorFlow stuff (only needs to happen once)
sess = tf.Session()
c_ph = tf.placeholder(tf.float32, shape=c.shape)
c_mean = tf.reduce_mean(c_ph)
# run TensorFlow
print(sess.run(c_mean, feed_dict={c_ph: c.numpy()}))
Run Code Online (Sandbox Code Playgroud)
这可能有点牵强,但有没有一种方法可以做到这一点
a 永远不会留下GPU内存,或者a 从GPU内存到固定内存到GPU内存.我尝试2.在上面使用的代码中使用,non_blocking=True但我不确定它是否符合我的预期(即将其移至固定内存).
理想情况下,我的TensorFlow图将直接在PyTorch张量占用的内存上运行,但我认为这是不可能的?
我有兴趣使用F#进行数值计算.如何在F#下使用NVIDIA的CUDA标准访问GPU?
我正在研究PTX,我不明白CTA(计算线程数组)与CUDA块的不同之处.
它们是一样的吗?在我看来,现在(我只是在PTX文件的开头)他们是一样的