You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by Yue Ni <ni...@gmail.com> on 2023/12/05 02:35:51 UTC
[Discussion][Gandiva] Migration JIT engine from MCJIT to ORC v2
Hi there,
I'd like to initiate a discussion regarding the proposal to migrate the JIT
engine from LLVM MCJIT to LLVM ORC v2 [1] in Gandiva. I've provided a
concise description of the proposal in the following issue:
https://github.com/apache/arrow/issues/37848. I welcome any feedback or
comments on this topic. Please feel free to share your thoughts either here
on the mailing list or directly within the issue. Thank you for your
attention and help.
*Background:*
Gandiva currently employs MCJIT as its internal JIT engine. However, LLVM
has introduced a newer JIT API known as ORC v2/LLJIT [1], which presents
several advantages over MCJIT:
* Active Maintenance: ORC v2 is under active development and maintenance by
LLVM developers. In contrast, MCJIT is not receiving active updates and,
based on indications from LLVM developers, is slated for eventual
deprecation and removal.
* Modularity and Organization: ORC v2 boasts a more organized and modular
structure, granting users the flexibility to seamlessly integrate various
JIT components.
* Thread-Local Variable Support: ORC v2 natively supports thread-local
variables, enhancing its functionality.
* Enhanced Resource Management: When compared to MCJIT, ORC v2 provides a
more granular approach to resource management, optimizing memory usage and
code compilation.
*Proposal:*
I propose the introduction of ORC v2/LLJIT to replace MCJIT in gandiva.
There should not be any user facing change, and performance is expected to
be roughly the same.
Any feedback is appreciated. Thanks.
*References:*
[1] https://llvm.org/docs/ORCv2.html
[2] https://github.com/apache/arrow/issues/37848
Regards,
Yue Ni
Re: [Discussion][Gandiva] Migration JIT engine from MCJIT to ORC v2
Posted by Yue Ni <ni...@gmail.com>.
Hi Antoine,
> does it raise the minimum supported LLVM version
According to LLVM's documentation [1] [2], the LLJIT API (for ORC v2 JIT)
was added in LLVM 8.0, so the minimum version required will be LLVM 8.0 I
believe. And I see currently we support LLVM 7.0 ~ 17.0 in arrow [3], so
we may have to at least raise the minimum version to LLVM 8.0 (released on
Mar 20, 2019 [4]) if this proposal is accepted.
But the migrated implementation will use multiple LLJIT APIs, and I am not
sure if all of them were available since 8.0. Currently I only verified
against LLVM 14.0.6 locally, and the full compatibility status will require
some more testing to figure out. Thanks.
Regards
Yue Ni
[1] https://llvm.org/docs/ORCv2.html
[2]
https://releases.llvm.org/8.0.0/docs/ReleaseNotes.html#changes-to-the-jit-apis
[3]
https://github.com/apache/arrow/blob/92723f34f8df40b35e5840e61011c00766808014/cpp/CMakeLists.txt#L154-L166
[4] https://releases.llvm.org
On Wed, Dec 6, 2023 at 5:58 PM Antoine Pitrou <an...@python.org> wrote:
>
> Given that MCJIT is deprecated and there doesn't seem to be a downside
> to the new APIs, migrating to ORC v2 sounds fine to me.
>
> Just a question: does it raise the minimum supported LLVM version?
>
> Regards
>
> Antoine.
>
>
> Le 05/12/2023 à 03:35, Yue Ni a écrit :
> > Hi there,
> >
> > I'd like to initiate a discussion regarding the proposal to migrate the
> JIT
> > engine from LLVM MCJIT to LLVM ORC v2 [1] in Gandiva. I've provided a
> > concise description of the proposal in the following issue:
> > https://github.com/apache/arrow/issues/37848. I welcome any feedback or
> > comments on this topic. Please feel free to share your thoughts either
> here
> > on the mailing list or directly within the issue. Thank you for your
> > attention and help.
> >
> > *Background:*
> > Gandiva currently employs MCJIT as its internal JIT engine. However, LLVM
> > has introduced a newer JIT API known as ORC v2/LLJIT [1], which presents
> > several advantages over MCJIT:
> >
> > * Active Maintenance: ORC v2 is under active development and maintenance
> by
> > LLVM developers. In contrast, MCJIT is not receiving active updates and,
> > based on indications from LLVM developers, is slated for eventual
> > deprecation and removal.
> > * Modularity and Organization: ORC v2 boasts a more organized and modular
> > structure, granting users the flexibility to seamlessly integrate various
> > JIT components.
> > * Thread-Local Variable Support: ORC v2 natively supports thread-local
> > variables, enhancing its functionality.
> > * Enhanced Resource Management: When compared to MCJIT, ORC v2 provides a
> > more granular approach to resource management, optimizing memory usage
> and
> > code compilation.
> >
> > *Proposal:*
> > I propose the introduction of ORC v2/LLJIT to replace MCJIT in gandiva.
> > There should not be any user facing change, and performance is expected
> to
> > be roughly the same.
> >
> > Any feedback is appreciated. Thanks.
> >
> > *References:*
> > [1] https://llvm.org/docs/ORCv2.html
> > [2] https://github.com/apache/arrow/issues/37848
> >
> > Regards,
> > Yue Ni
> >
>
Re: [Discussion][Gandiva] Migration JIT engine from MCJIT to ORC v2
Posted by Antoine Pitrou <an...@python.org>.
Given that MCJIT is deprecated and there doesn't seem to be a downside
to the new APIs, migrating to ORC v2 sounds fine to me.
Just a question: does it raise the minimum supported LLVM version?
Regards
Antoine.
Le 05/12/2023 à 03:35, Yue Ni a écrit :
> Hi there,
>
> I'd like to initiate a discussion regarding the proposal to migrate the JIT
> engine from LLVM MCJIT to LLVM ORC v2 [1] in Gandiva. I've provided a
> concise description of the proposal in the following issue:
> https://github.com/apache/arrow/issues/37848. I welcome any feedback or
> comments on this topic. Please feel free to share your thoughts either here
> on the mailing list or directly within the issue. Thank you for your
> attention and help.
>
> *Background:*
> Gandiva currently employs MCJIT as its internal JIT engine. However, LLVM
> has introduced a newer JIT API known as ORC v2/LLJIT [1], which presents
> several advantages over MCJIT:
>
> * Active Maintenance: ORC v2 is under active development and maintenance by
> LLVM developers. In contrast, MCJIT is not receiving active updates and,
> based on indications from LLVM developers, is slated for eventual
> deprecation and removal.
> * Modularity and Organization: ORC v2 boasts a more organized and modular
> structure, granting users the flexibility to seamlessly integrate various
> JIT components.
> * Thread-Local Variable Support: ORC v2 natively supports thread-local
> variables, enhancing its functionality.
> * Enhanced Resource Management: When compared to MCJIT, ORC v2 provides a
> more granular approach to resource management, optimizing memory usage and
> code compilation.
>
> *Proposal:*
> I propose the introduction of ORC v2/LLJIT to replace MCJIT in gandiva.
> There should not be any user facing change, and performance is expected to
> be roughly the same.
>
> Any feedback is appreciated. Thanks.
>
> *References:*
> [1] https://llvm.org/docs/ORCv2.html
> [2] https://github.com/apache/arrow/issues/37848
>
> Regards,
> Yue Ni
>