No, there's no build-time configuration settings to enable TBB specifically.

You can, at runtime, specify a custom executor to use for most operations.
We use one thread pool for CPU tasks and one for I/O tasks.  You could
replace either or both with a TBB-based executor.

For example, the method for creating a CSV file is defined as:

```
static Future<std::shared_ptr<StreamingReader>> MakeAsync(
  io::IOContext io_context, std::shared_ptr<io::InputStream> input,
  arrow::internal::Executor* cpu_executor, const ReadOptions&, const
ParseOptions&,
  const ConvertOptions&);
```

The `cpu_executor` property specifies which thread pool to use for CPU
tasks.  The I/O executor is a part of the `io_context`.

The executor interface is pretty straightforward.  Hiding the utility
functions it is...

```
class ARROW_EXPORT Executor {
public:
  virtual int GetCapacity() = 0;
protected:
  virtual Status SpawnReal(TaskHints hints, FnOnce<void()> task, StopToken,
StopCallback&&) = 0;
};
```

It shouldn't be too much work to create a custom implementation based on
TBB.  Out of curiosity, what is the motivation for using TBB?

-Weston

On Fri, Apr 21, 2023 at 11:04 AM Surya Kiran Gullapalli <
suryakiran.gullapa...@gmail.com> wrote:

> Hello,
> I'm curious to know if c++ sdk of arrow compute functions can use tbb
> parallelization underneath ?
> The documentation mentions that arrow uses a threadpool for
> parallelization. Does compute functions also use threadpool and parallelize
> computation ?
>
> Looking at the .so file created I do not see tbb library as a dependency
> for arrow library.
>
> Is there a configuration variable during build which can activate this ?
>
> Thanks,
> Surya
>

Reply via email to