Perlバインディング入門 - C言語/C++/Cudaの呼び出し

Perlのバインディング入門です。バインディングとは、PerlからC言語/C++/Cudaなどで書かれたソースコードをPerlから呼び出せるようにすることをいいます。

CやC++でコードを記述すると、最高のパフォーマンスを得ることができます。画像処理・動画処理・信号処理・科学技術計算・機械学習など、数値計算や配列の演算のパフォーマンスが重要視される場合は、C言語やC++のライブラリをPerlからバインディングするというのは、良い解決策のひとつです。

近年では、ディープラーニングで並列計算を行うためにGPUが利用されますが、GPUを利用するためのCuda言語もバインディングも可能です。nvccというコンパイラで、コンパイルされますが、C言語/C++の記法が採用されています。

XSを使ったバインディング

XSを使ったバインディング手法があります。Perlにおけるもっとも標準的な方法です。型変換は手動で、XSのAPIを覚えることが必要で、C言語をバインディングするPerlモジュールとして作成する必要があります。

Inlineモジュールを使ったバインディング

Inlineモジュールを使ったバインディング手法があります。C言語のランタイム実行が可能です。型変換は手動です。

Inline::C Inline::CPP

FFIライブラリを使ったバインディング

FFIライブラリを使ったバインディング手法があります。C言語のランタイム実行が可能です。FFI仕様に基づいた呼び出しで、直接共有ライブラリ(.so)を呼び出すことができます。型変換は手動です。

FFI, FFI::Raw, FFI::Platypus

SPVMを使ったバインディング

SPVMを使ったバインディング手法があります。SPVMは、Perlバインディングのいくつかの課題を解決するために、木本裕紀が開発している2021年9現在、完成を目指して頻繁に更新されている開発段階のPerlモジュールです。完成度は、95%を超えていますが、試験段階で仕様上の問題点がいくつかでてきたり、実現したい必要な機能がいくつか足りない、ドキュメントが不正確という状況です。

SPVM

Perlで数値計算や配列演算のパフォーマンスが欲しいなぁ。
そんなときは、C言語を使って関数を記述して、Perlへバインディングするという手法があります。
多くのソフトウェアの基盤であり、基礎でもあるC言語はPerlと連携できます。
C言語/C++で書かれたライブラリをPerlから呼び出すこともできます。
ディープラーニングで利用されるGPUで計算するためのCuda言語もバインディング可能です。

バインディングの基礎知識

Perlバインディングで必要となる基礎知識です。

Perlプログラミング言語

Perlプログラミング言語の講座です。

C言語

C言語の講座です。

バインディングの質問

仲間と交流をしたり、バインディングの質問ができる会員限定のPerlクラブ・フォーラムがあります。Twitterのリプライ・ダイレクトメッセージ、Youtubeのコメント欄も利用できます。

関連情報