3

AMD の OpenCL 実装を使用して Hello World アプリケーションを作成しようとしています。 http://developer.amd.com/tools-and-sdks/heterogeneous-computing/amd-accelerated-parallel-processing-app-sdk/introductory-tutorial-to-opencl/

ここのようにディレクトリ、libなどをセットアップしました

以下がコンパイルされます。

#include "stdafx.h"
#include <CL/cl.h>

int _tmain(int argc, _TCHAR* argv[])
{
    cl_platform_id test;
    cl_uint num;
    cl_uint ok = 1;
    clGetPlatformIDs(ok, &test, &num);

    return 0;

}

でも、

#include "stdafx.h"

#include <utility>
#include <CL/cl.hpp>


int _tmain(int argc, _TCHAR* argv[])
{
    cl::vector< cl::Platform > platformList;

    return 0;
}

ではない。

次のエラーが表示されます。

Error   1   error C2039: 'vector' : is not a member of 'cl' D:\Documents\Projects\Visual Studio\C++\cl_helloworld\cl_helloworld\cl_helloworld.cpp   12  1   cl_helloworld
Error   2   error C2065: 'vector' : undeclared identifier   D:\Documents\Projects\Visual Studio\C++\cl_helloworld\cl_helloworld\cl_helloworld.cpp   12  1   cl_helloworld
Error   3   error C2275: 'cl::Platform' : illegal use of this type as an expression D:\Documents\Projects\Visual Studio\C++\cl_helloworld\cl_helloworld\cl_helloworld.cpp   12  1   cl_helloworld
Error   4   error C2065: 'platformList' : undeclared identifier D:\Documents\Projects\Visual Studio\C++\cl_helloworld\cl_helloworld\cl_helloworld.cpp   12  1   cl_helloworld

IntelliSense に下線が引かvector< cl::Platform > platformListれ、cl:: と入力すると、ベクター クラスが表示されません。

編集

cl.hpp の内容を main.cpp に手動でコピーすると、IntelliSense にベクターが表示されますが、プロジェクトをコンパイルできません。

4

1 に答える 1

6

std::vector<cl:XXXX>代わりに使用してください。それが私が使用しているもので、まったく問題ありません。非常に複雑な OpenCL C++ アプリがあります。

cl::vectorの前に定義することで、内部クラスを有効にすることもできます#include <cl.hpp> #define __NO_STD_VECTOR。ただし、標準よりも機能が劣るため、お勧めしません。

例: イベントのベクトルがある場合、std ではイベントを選択的に削除できます。ただし、cl::vector では手動で行う必要があります。

于 2013-11-08T15:03:59.833 に答える