我在OpenGL中制作了一个2D牛顿重力模拟,其中有许多粒子跟随鼠标,在一个循环中改变速度,迭代所有粒子。
它运行良好,但性能不是那么好,我可以得到平均60 fps的2 milion粒子(我有一个i7 6700k和一个gtx 970)。 所以我认为多线程是改善它的最佳方式。 为此,我使用了OpenMP 2.0(我在Visual Studio上)。 然后更新循环变为:
<com.mikhaellopez.circularimageview.CircularImageView
android:id="@+id/card_thumbnail"
android:layout_width="70dp"
android:layout_height="70dp"
android:background="@drawable/shape_colored_circle" //Note
android:contentDescription="@string/card_thumbnail"
android:src="@drawable/icon"
app:civ_border="true"
app:civ_border_color="@color/border_color"
app:civ_border_width="2dp"
app:civ_shadow="true"
app:civ_shadow_color="@color/grey"
app:civ_shadow_radius="10"/>`
GradientDrawable gd = (GradientDrawable) holder.thumbnail.getBackground()
if (gd != null) {
gd.mutate();
gd.setColor(colors[position]);
}
性能提升了很多(现在我得到130 fps),但并不像预期的那样,实际上有8个线程(4个内核采用Intel超线程),我希望它比以前好8倍;但它只是好3倍。 我在使用openMP时遇到了什么问题,或者我的性能是否会提高?
答案 0 :(得分:1)
您的代码看起来很好,没有什么可以立即改进,但您的期望太高了。
任何其他优化都将在很大程度上取决于count
和其余代码。如果您需要具体建议,则必须将代码作为提取的[mcve]。