我需要加速一些计算和计算结果然后用于绘制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。
有什么建议吗?
答案 0 :(得分:0)
您尝试使用的数据结构不会在需要连续存储的API中连续存储其元素。好吧,其中一个必须给予,它不会是OpenGL。 GL不会走concurrent_vector
的数据结构(如果你喜欢表演的话)。
所以你的选择是不使用非顺序对象。
我只能猜测你正在做什么(因为你没有为发生器提供示例代码),所以这限制了我的建议。如果parallel_for
迭代固定次数(“固定”,我的意思是在parallel_for
执行之前就知道的值。它不会根据您迭代的次数而改变),那么你可以使用常规的vector
。
只需使用vector::size
调整矢量大小。这将对元素进行值初始化,这意味着每个元素都存在。您现在可以执行parallel_for
循环,但不是使用push_back
或其他任何东西,而只是将元素直接复制到输出中的位置。我认为parallel_for
可以迭代实际的向量迭代器,但我不是正面的。无论哪种方式,都没关系;除非您尝试从不同的线程设置相同的元素,否则不会获得任何竞争条件。