2016-03-25 8 views
0

私はコマンドキュー経由で渡されたバッファを単に出力するhello_worldカーネルを実行することで独特の結果を得ました。私は同じプラットフォーム上の異なるデバイスから2つの異なる結果を得ています。以下のコンソール出力の一番下を参照してください:ここでOpenCL - 異なるカーネル "printf()"が異なるデバイスに出力されますか?

は私のカーネルのコードです:

std::string message = "Hello World!"; 
    int messageSize = message.length(); 
    std::cout << "   ---> Creating Buffer... "; 
    cl::Buffer buffer(CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(char) * messageSize, (char*)message.c_str()); 

    kernel.setArg(0,buffer); 
    kernel.setArg(1,sizeof(int),&messageSize); 
    std::cout << "Done!" << std::endl; 

    for (cl_uint i = 0; i<m_deviceCount[m_currentPlatform]; i++) { 
     std::cout << "   ---> Queuing Kernel Task on Device #"<< m_currentPlatform << "." << i << "... "; 
     m_commandQueues[i].enqueueTask(kernel); 
     std::cout << "Done!" << std::endl; 
     std::cout << "   ---> Executing... Output:\n\n"; 
     m_commandQueues[i].finish(); 
     std::cout << "\n\n   ---> Done!" << std::endl; 
    } 

そして、私のコンソール出力:

Found 1 Platforms 

Platform #0: 
    Name: AMD Accelerated Parallel Processing 
    Found 2 Devices 
     Device #0.0: 
      --> Name:    Juniper 
      --> Vendor:    Advanced Micro Devices, Inc. 
      --> Max Compute Units: 10 
      --> Max Clock Freq:  850 
      --> Global Mem Size: 512 MBs 
      --> Local Mem Size:  32 KBs 
      --> Hardware Version: OpenCL 1.2 AMD-APP (1800.11) 
      --> Software Version: 1800.11 
      --> Open CL Version: OpenCL C 1.2 
      --> Images Supported: YES 
     Device #0.1: 
      --> Name:    Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz 
      --> Vendor:    GenuineIntel 
      --> Max Compute Units: 8 
      --> Max Clock Freq:  3796 
      --> Global Mem Size: 15905 MBs 
      --> Local Mem Size:  32 KBs 
      --> Hardware Version: OpenCL 1.2 AMD-APP (1800.11) 
      --> Software Version: 1800.11 (sse2,avx) 
      --> Open CL Version: OpenCL C 1.2 
      --> Images Supported: YES 

    Using Platform With Most Available Devices: Platform #0 
      ---> Creating Context.... Done! 
      ---> Creating Command Queue for Device #0.0.... Done! 
      ---> Creating Command Queue for Device #0.1.... Done! 
      ---> Loading Program: hello_world.cl... 
        > Compiling... Done! 
      ---> Creating Buffer... Done! 

      ---> Queuing Kernel Task on Device #0.0... Done! 
      ---> Executing... Output: 

H(null)e(null)l(null)l(null)o(null) (null)W(null)o(null)r(null)l(null)d(null)!(null) 

      ---> Done! 
      ---> Queuing Kernel Task on Device #0.1... Done! 
      ---> Executing... Output: 

Hello World! 

      ---> Done! 

__kernel void hello_world (__global char* message, int messageSize) { 
    for (int i =0; i < messageSize; i++) { 
     printf("%c", message[i]); 
    } 
} 

、ここでは私の関数呼び出しであります

Intel CPUは、AMD GPUが文字の間に「(ヌル)」を挿入する理由を知っていますか? AMDがOpenCLを実装するのはそれが普通ですか?

+0

ありがとうその行にいくつかのブラウザウィンドウからの「Hello World」はあなたをやった

https://github.com/pradyotsn/opencl_printf

の位置は:私のプログラムを参照することができますか?はいの場合は、自分で書くことができますか? –

+0

いいえ、自分でVimに書きました。変わったのは、各デバイスで実行されているのとまったく同じOCLカーネルですが、印刷された出力は異なります。 –

答えて

-1

カーネル内のprintfもやってみました。あなたがコピー&ペーストしていなかった