我现在已经完成了我的光线跟踪器,但我正在尝试学习线程以优化渲染时间。使用int8_t *(对于R / G / B / A为4 int8_t /像素)来表示我的窗口的每个像素。以下是我尝试做的一个示例:
设置的线程数:4
[0] ------- 1 [2] ------- [3] [4] ------- [5] [6] --- ---- [7]
[线程1] [线程2] [线程3] [线程4]
对于8的数组,每个线程需要2个单元格,但我希望它们在数组上同时工作。如果每个线程在特定部分上工作,这可能吗?
在这个screen(ptr *是int8_t *)上,你可以看到每个线程对数组有一个影响区域(从实际数组部分的起始位置到结束位置)。
如果每个线程都在特定部分上工作,这是否可行?
感谢您的回复。
答案 0 :(得分:2)
是的,可以使用多线程光线跟踪器,所有线程都写入相同的输出缓冲区而无需额外同步, if :
为了获得最佳性能,您可能不希望两个线程同时尝试写入同一缓存行。不要让线程在数组中跳跃,而是考虑将图像分割成更大的连续块。
我通常将每个线程设置在图像中自己的行上。当一个完成一行时,我让它在下一个未分配的行上工作。以这种方式提取部分确实需要一些同步,但这非常小,通常不会受到严重争用。