小编Zk1*_*001的帖子

GPU中缓存未命中的变化

我一直在玩一个访问7个全局内存缓冲区的OpenCL内核,对值做一些事情并将结果存储回第8个全局内存缓冲区.正如我所观察到的,随着输入大小的增加,L1缓存未命中率(=未命中(未命中+命中))变化很大.我找不到这种变化的来源.此处的输入大小表示全局工作项的数量(2的幂和工作组大小的倍数).工作组大小的数量仍为256.

这些是结果.这些显示了L1缓存未命中率.从4096个工作项(16个工作组)开始.

0.677125
0.55946875
0.345994792
0.054078125
0.436167969
0.431871745
0.938546224
0.959258789
0.952941406
0.955016479
Run Code Online (Sandbox Code Playgroud)

分析器说它每个线程使用18个寄存器.这是代码(函数TTsum()应该只做一堆依赖的超越操作,所以它与缓存无关)我猜:

float TTsum(float x1, float x2, float x3, float x4, float x5, float x6, float x7)
{
        float temp = 0;
        for (int j = 0; j < 2; j++)
                temp = temp +  x1 + (float)x2 + x3 + x4 + x5 + x6 + x7;
        temp = sqrt(temp);
        temp = exp(temp);
        temp = temp / x1;
        temp = temp / (float)x2;
        for (int j = 0; …
Run Code Online (Sandbox Code Playgroud)

gpu gpgpu opencl

18
推荐指数
1
解决办法
1480
查看次数

GPU中的上下文切换机制是什么?

据我所知,GPU在warp之间切换以隐藏内存延迟.但我想知道在哪种条件下,经线会被切换掉?例如,如果warp执行加载,并且数据已经存在于缓存中.那么warp是否已经关闭或继续下一次计算?如果连续两次添加会发生什么?谢谢

cuda gpu gpgpu opencl

17
推荐指数
1
解决办法
7578
查看次数

TensorFlow默认使用机器中的所有可用GPU吗?

我的机器上有3个GTX Titan GPU.我使用cifar10_train.py运行Cifar10中提供的示例并获得以下输出:

I tensorflow/core/common_runtime/gpu/gpu_init.cc:60] cannot enable peer access from device ordinal 0 to device ordinal 1
I tensorflow/core/common_runtime/gpu/gpu_init.cc:60] cannot enable peer access from device ordinal 1 to device ordinal 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:127] DMA: 0 1 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:137] 0:   Y N 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:137] 1:   N Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:694] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN, pci bus id: 0000:03:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:694] Creating TensorFlow device (/gpu:1) -> (device: 1, name: GeForce GTX TITAN, pci bus id: 0000:84:00.0) …
Run Code Online (Sandbox Code Playgroud)

gpu machine-learning computer-vision tensorflow

17
推荐指数
1
解决办法
1万
查看次数

在Cifar10上更改TensorFlow中的线程数

每当我运行cifar10_eval.py时,在创建32个线程时如下:

I tensorflow/core/common_runtime/local_device.cc:25]本地设备intra op parallelism threads:32

我认为这个线程数是在CPU上运行的线程数,但是当我检查使用情况时,只使用了400-500%的CPU.反正有没有改变这个线程数?

multithreading tensorflow

14
推荐指数
1
解决办法
1万
查看次数

GPU上的分支预测

我有一个关于GPU中分支预测的问题.据我所知,在GPU中,它们通过分支进行预测.

例如,我有一个这样的代码:

if (C)
 A
else
 B
Run Code Online (Sandbox Code Playgroud)

因此,如果A需要40个周期而B需要50个周期来完成执行,如果假设一个warp,A和B都被执行,那么完成这个分支需要总共90个周期吗?或者它们是否重叠A和B,即,当执行A的某些指令时,等待内存请求,然后执行B的某些指令,然后等待内存,依此类推?谢谢

cuda gpu gpgpu opencl

11
推荐指数
1
解决办法
4861
查看次数

是什么导致CPU缓存未命中?

我有一个关于x86架构中的差异缓存级别的缓存未命中之间的关系的问题(Say Xeon X5660).

我在一些性能计数器上对OpenCL应用程序(Blackscholes)进行了一些分析.对于每个计数器,我总结所有核心上的所有值并获得此结果:

 instructions #: 493167746502.000000 

 L3_MISS #: 1967809.000000 

 L1_MISS  #: 2344383795.000000 

 L2_DATA_MISS #: 901131.000000 

 L2_MISS #: 1397931.000000 

 memory loads #: 151559373227.000000
Run Code Online (Sandbox Code Playgroud)

问题是为什么L3未命中数量大于L2未命中数?(我不断多次重新进行分析,差异不大).我的想法基本上是:

L2未命中= L3命中+ L3未命中

有人可以解释我这里出了什么问题,我有没有想念?

更进一步,是什么原因导致CPU的最后一级缓存(CPU)的缓存读取?它只是L2中的数据丢失吗?

谢谢

memory cpu profiling caching opencl

9
推荐指数
1
解决办法
1527
查看次数

GPU中的同步

我对GPU如何执行同步有一些疑问.据我所知,当一个warp遇到障碍时(假设它在OpenCL中),并且它知道同一组的其他warp还没有到达那里.所以它必须等待.但是在等待时间里,这种扭曲到底是做什么的呢?它仍然是一个活跃的扭曲?或者它会做某种空操作?

我注意到,当我们在内核中进行同步时,指令数量会增加.我想知道这个增量的来源是什么.同步是否分解为许多较小的GPU指令?或者因为空闲的warp会执行一些额外的指令?

最后,我如果同步增加的成本,比起一个没有同步强烈怀疑,(比方说屏障(CLK_LOCAL_MEM_FENCE))是由经纱在工作组(或threadblock)的数量的影响?谢谢

cuda gpu gpgpu nvidia opencl

7
推荐指数
1
解决办法
528
查看次数

使用汇编代码创建 AMD OpenCL 内核

我想创建一个适用于 AMD GPU(Fury Nano)的 OpenCL 内核。基本上我想使用 OpenCL 编写内核草案,并使用 OpenCL API 使用 clGetProgramInfo 输出汇编代码。然后我将修改汇编代码并使用 clcreateprogramwithbinary 将其加载回程序。

有没有可能的方法来做到这一点?

assembly gpu opencl amd-gpu

6
推荐指数
1
解决办法
942
查看次数

NVIDA GPU上cuda Kernel的峰值吞吐量

我对GPU上运行的内核的吞吐量有疑问.假设其占用率为0.5,块大小为256:编程指南指出最好有多个块,以便它们可以隐藏内存延迟等.但我不明白为什么这是正确的.因为只要内核每个流多处理器有多个warp = 24,即3个块,它就会达到峰值吞吐量.因此,具有超过24个warp(或3个块)将不会改变吞吐量.

我错过了什么吗?任何人都能纠正我吗?

cuda gpu gpgpu opencl

5
推荐指数
1
解决办法
1460
查看次数

NVIDIA Fermi 中的 L2 缓存

在查看NVIDIA Fermi架构中性能计数器的名称(cuda doc文件夹中的文件Compute_profiler.txt)时,我注意到对于L2缓存未命中,有两个性能计数器,l2_subp0_read_sector_misses和l2_subp1_read_sector_misses。他们说这些是用于两片 L2 的。

为什么他们有两片 L2?与流式多处理器架构有什么关系吗?这种划分对性能有什么影响?

谢谢

cuda gpu gpgpu nvidia

5
推荐指数
1
解决办法
836
查看次数