矢量 - > concurrent_vector migration + OpenGL限制

时间:2012-03-30 22:10:00

标签: windows opengl concurrency ppl

我需要加速一些计算和计算结果然后用于绘制OpenGL模型。 当我将std :: vector更改为Concurrency :: concurrent_vector并使用parallel_for而不仅仅是for循环时,主要的加速存档。 此向量(或concurrent_vector)在for(或parallel_for)循环中计算,并包含OpenGL可视化的顶点。

使用std :: vector很好,因为OpenGL渲染过程依赖于std :: vector按顺序保存它的项目,而不是concurrent_vector的情况。代码运行如下:

glVertexPointer(3, GL_FLOAT, 0, &vectorWithVerticesData[0]);

生成concurrent_vector并将其复制到std :: vector太贵了,因为有很多项目。

所以,问题是:我想使用OpenGL数组,但也喜欢使用与OpenGL输出不兼容的concurrent_vector。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您尝试使用的数据结构不会在需要连续存储的API中连续存储其元素。好吧,其中一个必须给予,它不会是OpenGL。 GL不会走concurrent_vector的数据结构(如果你喜欢表演的话)。

所以你的选择是不使用非顺序对象。

我只能猜测你正在做什么(因为你没有为发生器提供示例代码),所以这限制了我的建议。如果parallel_for迭代固定次数(“固定”,我的意思是在parallel_for执行之前就知道的值。它不会根据您迭代的次数而改变),那么你可以使用常规的vector

只需使用vector::size调整矢量大小。这将对元素进行值初始化,这意味着每个元素都存在。您现在可以执行parallel_for循环,但不是使用push_back或其他任何东西,而只是将元素直接复制到输出中的位置。我认为parallel_for可以迭代实际的向量迭代器,但我不是正面的。无论哪种方式,都没关系;除非您尝试从不同的线程设置相同的元素,否则不会获得任何竞争条件。