インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

6.4. カスタム・プラットフォーム固有の関数へのアクセス

カスタム・プラットフォームで利用可能な、ユーザーがアクセスできる関数をオプションでアプリケーションに含めることができます。ただし、ホスト・アプリケーションをFPGAクライアント・ドライバー (FCD) にリンクすると、それらのカスタム・プラットフォーム固有の関数を直接参照することはできません。 FCDとリンク中に、カスタム・プラットフォーム固有のユーザーがアクセス可能な関数を参照するには、ホスト・アプリケーションにclGetBoardExtensionFunctionAddressIntelFPGA拡張を含めます。

clGetBoardExtensionFunctionAddressIntelFPGA拡張は、カスタム・プラットフォームからユーザーがアクセス可能な関数へのポインターを取得するAPIを指定します。

重要: Linuxシステムの場合、clGetBoardExtensionFunctionAddressIntelFPGA関数は、FCDの有無にかかわらず機能します。Windowsシステムの場合、この関数はFCDと併用する場合にのみ機能します。カスタム・プラットフォームにおいてFCDがサポートされているかは、ボードメーカーへお問い合わせください。

拡張インターフェイスの定義は、 INTELFPGAOCLSDKROOT/host/include/CL/cl_ext.hファイルで確認できます。

カスタム・プラットフォームでユーザーがアクセス可能な関数へのポインターを取得するには、ホスト・アプリケーションで次の関数を呼び出します。
void* clGetBoardExtensionFunctionAddressIntelFPGA (
    const char* function_name,
    cl_device_id device
    );

以下に詳細を説明します。

function_nameは、カスタム・プラットフォームのメーカーが提供するユーザーがアクセス可能な関数の名前を指します。

また、

deviceは、clGetDeviceIDs関数によって返されるデバイスIDです。

ユーザーがアクセス可能な関数を識別すると、clGetBoardExtensionFunctionAddressIntelFPGA関数は、ユーザーがアクセス可能な関数へのポインターを返します。カスタム・プラットフォームにその関数が存在しない場合、clGetBoardExtensionFunctionAddressIntelFPGANULLを返します。
重要:

インストーラブル・クライアント・ドライバー (ICD) を介しclGetBoardExtensionFunctionAddressIntelFPGA APIにアクセスする際は、ICD拡張APIのclGetExtensionFunctionAddressIntelFPGAが、最初にclGetBoardExtensionFunctionAddressIntelFPGA APIへのポインターを取得していることを確認してください。

次のコード例は、ICDを介したカスタム・プラットフォーム固有の関数へのアクセス方法を示しています。

clGetBoardExtensionFunctionAddressIntelFPGA_fn  clGetBoardExtensionFunctionAddressIntelFPGA =  (clGetBoardExtensionFunctionAddressIntelFPGA_fn)  clGetExtensionFunctionAddressForPlatform (platform, "clGetBoardExtensionFunctionAddressIntelFPGA"); 
if (clGetBoardExtensionFunctionAddressIntelFPGA == NULL){ printf ("Failed to get clGetBoardExtensionFunctionAddressIntelFPGA\n");
}

void * board_extension_function_ptr =  clGetBoardExtensionFunctionAddressIntelFPGA("function_name",device_id);