小编lod*_*dhb的帖子

分支和谓词指令

"CUDA C编程指南" 第5.4.2节规定,分支差异由"分支指令"处理,或者在某些条件下由"预测指令"处理.我不明白两者之间的区别,以及为什么一个导致比另一个更好的性能.

该评论表明,分支指令导致更多数量的执行指令,由于"分支地址解析和获取"而导致停止,以及由于"分支本身"和"发散保留"导致的开销,而预测指令仅产生"指令执行延迟,以进行条件测试并设置谓词".为什么?

cuda simd

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

以编程方式在Excel中隐藏活动工作簿

我正在开发一个基于工作簿的VBA项目.该代码打开一个新工作簿并调用外部API,该API在这个新工作簿的多个工作表中下载并插入一堆数据.我停用了屏幕更新(Application.Screenupdating = False),因此最初屏幕保持专注于原始工作簿,而API在后台下载其他工作簿上的数据.但是,一旦API插入数据,屏幕就会切换到新工作簿.我怎样才能防止这种情况发生?谢谢!

excel vba screen excel-vba

11
推荐指数
3
解决办法
6万
查看次数

双精度浮点格式的最大和最小指数

根据IEEE Std 754-2008标准,二进制64双精度浮点格式的指数字段宽度为11位,通过1023的指数偏差进行补偿.该标准还规定最大指数为1023,并且最低为-1022.为什么最大指数不是:

2^10 + 2^9 + 2^8 + 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 - 1023 = 1024
Run Code Online (Sandbox Code Playgroud)

并且最小指数不是:

0 - 1023 = -1023
Run Code Online (Sandbox Code Playgroud)

谢谢!

floating-point binary numbers exponent floating-point-precision

4
推荐指数
1
解决办法
3988
查看次数

Code Igniter在插入数据时捕获错误(Active Record)

我使用以下代码将数据插入到我的数据库中:

$this->db->set('event_id', $event_id);
...
$this->db->set('creator_id', $creator_id);

$this->db->insert('event');
Run Code Online (Sandbox Code Playgroud)

如何确保过程成功并向用户显示确认消息,否则出现错误消息?

php database error-handling activerecord codeigniter-2

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

推动没有CUDA的OpenMP?

如果我的机器没有CUDA GPU,我可以在OpenMP设备系统中使用Thrust吗?如果是这样,我还需要CUDA工具包吗?

parallel-processing cuda openmp thrust

3
推荐指数
1
解决办法
1369
查看次数

在Matlab中优化具有多个输出的功能

说我有一个功能

[f,g,h] = function (x)

function.mMatlab中的文件中.我怎样才能找到最大化的值x,例如使用?该文档仅处理目标函数返回单个值时的情况.fminuncgfminunc

optimization matlab function

2
推荐指数
1
解决办法
1104
查看次数

GPU上的强大扩展

我想调查我的并行GPU代码(使用OpenACC编写)的强大扩展.使用GPU进行强扩展的概念 - 至少据我所知 - 比使用CPU更加模糊.我发现有关GPU的强大扩展的唯一资源建议修复问题大小并增加GPU的数量.不过,我相信有很强的比例一定量的范围内,例如缩放过流多处理器(在NVIDIA开普勒架构)的GPU.

OpenACC和CUDA的目的是明确地将硬件抽象给并行程序员,将其限制为使用帮派(线程块),工作者(warps)和向量(SIMT线程组)的三级编程模型.据我所知,CUDA模型旨在提供与其线程块相关的可伸缩性,这些线程块是独立的并映射到SMX.因此,我看到了两种方法来研究GPU的强缩放:

  1. 修复问题大小,并将每个块的线程块大小和线程数设置为任意常数.缩放线程块数(网格大小).
  2. 有了底层硬件的额外知识(例如CUDA计算能力,最大扭曲/多处理器,最大线程块/多处理器等),设置线程块大小和每个块的线程数,使得块占用整个单个SMX.因此,扩展线程块相当于在SMX上进行扩展.

我的问题是:关于GPU上的强缩放是否正确/相关,我的思路是什么?如果是这样,有没有办法在OpenACC中做到#2?

parallel-processing cuda gpgpu openacc

2
推荐指数
1
解决办法
651
查看次数

CUDA:避免在分支差异上执行串行执行

假设由单个warp(为简单起见)执行的CUDA内核到达if- else语句,其中warp中的condition20个线程满足,32 - 20 = 12个线程不:

if (condition){
    statement1;     // executed by 20 threads
else{
    statement2;     // executed by 12 threads
}
Run Code Online (Sandbox Code Playgroud)

根据CUDA C编程指南:

如果warp的线程经由数据相关的条件分支发散,则warp一次执行一条公共指令,warp串行执行所采用的每个分支路径,禁用不在该路径上的线程,以及所有路径完成后,线程会聚回同一个执行路径.

因此,这两个语句将在不同的循环中顺序执行.

Kepler体系结构每个warp调度程序包含2个指令调度单元,因此能够在每个周期发出每个warp 2个独立指令.

我的问题是:在这个只有两个分支的设置中,为什么能够statement1statement2不能由两个指令调度单元发出由warp中的32个线程同时执行,即20个线程执行statement1而另外12 个线程同时执行statement2?如果指令调度程序不是warp一次执行单个公共指令的原因,那么是什么?它是仅提供32线程宽指令的指令集吗?还是硬件相关的原因?

c++ cuda simd

2
推荐指数
1
解决办法
3292
查看次数

分析OpenMP并行化的C++代码

在一台没有sudo权限的机器上分析与OpenMP并行化的C++程序的最简单方法是什么?

c++ parallel-processing profiling openmp

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