Libigl实现CPU间的并行

在图形学编程中,面对大量数据处理和复杂计算时,可以通过并行化提高程序效率。Libigl提供了一种基于C++11线程的CPU并行解决方案,避免了GPU并行的过度使用和Windows上旧版openMP的限制。其header_only的parallel_for函数通过Lambda表达式定义任务,简单易用,适用于任何支持C++11的编译器,即使不使用libigl也能方便地集成到项目中。
摘要由CSDN通过智能技术生成

在进行图形学方面的实践与编程时,我们常常需要面对这样的问题:程序处理的数据量特别的大或者程序需要进行很复 杂的数学计算,导致每一小步骤都动辄十几分钟,大大降低程序的执行效率。并且,由于程序是单线程的,经常会发生一核有难,七核点赞的现象,所以需要将程序并行起来。然而使用基于GPU的并行比如cuda编程之类又有点大材小用,得不偿失,能够充分的实现CPU之间的并行就够用了。对于CPU的并行,可以使用的由openMP,然而WIndows上只支持比较旧版本的openMP,自己劳心劳力实现的代码可能并不能太提高效率,而且不具有可重复性,需要重复造轮子。

Libigl为我们提供了一个很好的CPU并行的实现,通过借助C++11 中的thread类实现线程间的作业调度,从而充分开发CPU的性能,达到提高效率的目的,并且此实现是header_only的,只需要引用头文件就可以使用,也不依赖于第三方库,只需要编译器支持c++11 即可。

// This file is part of libigl, a simple c++ geometry processing library.
// 
// Copyright (C) 2016 Alec Jacobson <alecjacobson@gmail.com>
// 
// This Source Code Form is subject to the terms of the Mozilla Public License 
// v. 2.0. If a copy of the MPL was not distributed with this file, You can 
// obtain one at http://mozilla.org/MPL/2.0/.
#ifndef IGL_PARALLEL_FOR_H
#define IGL_PARALLEL_FOR_H
#include "igl_inline.h"
#include <functional>

namespace igl
{
  // PARALLEL_FOR Functional implementation of a basic, open-mp style, parallel
  // for loop. If the inner block of a for-loop can be rewritten/encapsulated in
  // a single (anonymous/lambda) function call `func` so that the serial code
  // looks like:
  // 
  //     for(int i = 0;i<loop_size;i++)
  //     {
   
  //       func(i);
  //     }
  //
  // then `parallel_for(loop_size,func,min_parallel)` will use as many threads as
  // available on the current hardware to parallelize this for loop so long as
  // loop_size<min_parallel, otherwise it will just use a serial for loop.
  //
  // Inputs:
  //   loop_size  number of iterations. I.e. for(int i = 0;i<loop_size;i++) ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值