- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
好吧……我知道这个问题可能涉及多个主题,但我对 DirectX 和多线程是全新的,而且我到目前为止阅读的 Stackoverflow+MSDN 文章对我没有任何帮助。因此,我非常感谢将我推向正确方向的每条评论。
几周前我开始编写一个 Direct2D
渲染器,它绘制我放入其中的一些矩阵并在单个窗口中绘制它(顺便说一下,这很好用)。
我试图加快我的计算速度并得到了使用 openMP
的提示。使用 pragma 语句时,我的 progrman 使用 3 个线程而不是一个 - 我想这很好。但我没有注意到任何加速。然而,这不是最糟糕的部分。绘图调用比我计算矩阵占用的时间很多。我不知道如何才能加快速度。
请告诉我应该注意什么或如何加速/多线程我的绘图调用。
注意:我使用的是 STL、Windows 和 DirectX header ,但没有.NET、MFC/ATL 或类似库。
vector<dot> set computeMatrix(ushort x, ushort y)
{
// init set
#pragma omp parallel for
for(i=0; i<y; ++i)
for(j=0; j<x; ++j)
//do some computation
return set;
}
dot
是一个 D2D1 椭圆对象。
void draw(vector<dot> set)
{
pRenderTarget->BeginDraw();
pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
#pragma omp parallel for
for(auto coord: set)
{
// set the pBrush
pRenderTarget->FillEllipse(dot, pBrush);
}
pRenderTarget->EndDraw();
}
最佳答案
如果您使用的是 Win8 或更高版本,请确保您已设置 D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS创建 Direct2D 设备上下文时的选项。
When this flag is specified, Direct2D will distribute rendering across all of the logical cores present on the system, which can significantly decrease overall rendering time.
目前,此标志仅适用于几何体,并且需要 HAL。
As of Windows 8.1, this flag only affects path geometry rendering. It has no impact on scenes containing only other primitive types (such as text, bitmaps, or geometry realizations).
This flag also has no impact when rendering in software (i.e. when rendering with a WARP Direct3D device). To control software multithreading, callers should use the D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS flag when creating the WARP Direct3D device.
Specifying this flag can increase peak working set during rendering and can also increase thread contention in applications that already take advantage of multithreaded processing.
您可能还想考虑 geometry realizations .当有大量几何对象要渲染时,我发现这会产生显着差异,但是您必须针对您的场景进行概要分析。椭圆是一种简单的几何体,因此您可能看不到明显的增益,尤其是当您必须转换到渲染位置时。
OpenMP(或任何其他 GPU api)在简单任务上可能会提供更差的性能,因为必须创建“ View ”并将数据复制到 View 或从 View 复制数据。确保您的特定任务受益于使用 OpenMP,并确保您的分析包括上述步骤。
请记住,线程的创建和调度会产生大量开销。通常,通过使代码尽可能简单而不处理调度和同步,您会看到更好的性能。然而,精心规划的线程可以提供巨大的 yield ,尤其是当它们不操作相同的资源(或数据)时。
查看您的渲染过程,并尝试确定您的任何代码是否必须重新计算未更改的任何内容(大小、位置等)。在响应窗口大小更改时执行这些任务。注意您的结构对齐(内存边界)和数据的位置(缓存未命中代价高昂)。希望这会有所帮助。
关于c++ - 关于 Direct2D 绘图调用中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24429971/
在JSON输出中,“步骤”中有一个字段“maneuver”。在此“向左转”,“向右转”,“向左转轻微”等。示例为here 在哪里可以找到“操纵”字段的定义以及可能的值列表?没有相关描述here 提前致
默认情况下,我们如何从Google Direction API建议的替代 route 获得从A点到B点的最短距离路线?默认情况下,它会根据当前交通状况为我们提供最短持续时间的路线。我已经注意到,如果您
我想知道“precompile(r) directive”和“preprocessor directive”是一回事吗?我对前者不熟悉,但只是听说过,并通过这个Google在互联网上找到了一些关于它的
对于我的项目,我目前正在开发自定义表单/输入指令。 例如,我有以下指令: angular.module('myApp').directive("textField", function() {
我用谷歌搜索了一下,但找不到任何详细说明如何制作动态包装内容的 Angular 指令的内容(例如 http://demos.telerik.com/kendo-ui/panelbar/angular
我正在尝试在另一个指令中使用一个指令。具体来说,我有一个模态指令,我想传递一个表单指令,并将充当模态的主体。 我的模态指令: angular.module('Storyboard').dir
我构建了一个模块化形式的小型演示,其中包含单独的输入指令。它还可以预览绑定(bind)到相同 Controller 和范围的表单值。 导致问题的输入指令是嵌入到表单内的输入:
HTML 指令 .directive('authorname', function() { return { restrict: 'E', scope: {
我有可以编译的 Angular 指令 至和 至Hello World! 我怎样才能把greeting在我的 HTML 中标记并将其编译为 print-greeting然后最后显示Hello World
标题中引用的脚注是什么意思?这是 6.10.3p11 的脚注 If there are sequences of preprocessing tokens within the list of arg
因此,电话号码始终是 ltr(从左到右)。 在多语言网站上工作,我需要在方向为 rtl 的文本段落中插入一个电话号码(带有“+”前缀和由“-”分隔的数字)(当然是针对相关语言) 所以我有这样的东西:
我有一个标题元素,我想显示 flex 列,这样我就可以将 .container div 垂直居中。这工作正常。然后我需要 .container 中的元素在 1200px 之间以均匀的间距连续 flex
如何将整个ng-repeat对象传递给指令(或如何将指令的作用域设置为ng-repeat项)? 我是新来的有角度的人,很难解决这个问题。 我有一个 Controller ,可以很好地呈现以下内容:
我需要将“...”放在文本前面,并在填充 div 时仅显示文本的最后一部分。 正常时不执行任何操作 C:\fakepath\996571_1398802860346752_209456547
我需要将“...”放在文本的前面,并且只显示它的最后一部分,当它填充 div 时。 正常的时候什么也不做 C:\fakepath\996571_1398802860346752_209456
我需要一个“粘性”指令,当它位于页面顶部时向元素添加一个 css 类,并且还指示其状态的变化。出于这个原因,我定义了一个范围,如 { onStickyChange: '&' }。现在我想在 angul
我对 ngSwitch 指令有点困惑——它是“属性指令”还是“结构指令”。 属性指令用“方括号”编写,如 [ngStyle]、[ngClass] 等(我们将其写为 [ngSwitch],将其称为“属性
Wi-Fi direct 的 Wiki 规范声称“只有一个 Wi-Fi 设备需要兼容 Wi-Fi Direct 才能建立点对点连接,在彼此之间直接传输数据,大大减少了设置”。但是从 android A
我有一个响应式模板,我正尝试将其与我的 Angularjs 应用程序一起使用。这也是我的第一个 Angular 应用程序,所以我知道我在未来有很多错误和重构。 我已经阅读了足够多的关于 Angular
首先,我这样做的方式可能不正确。但我会解释这个问题: 1) 我正在创建名为 的指令 2) 当点击第一个指令中的按钮时,我试图在运行时动态插入第二个指令 如下: var app = angu
我是一名优秀的程序员,十分优秀!