Quantcast
Channel: Active questions tagged kernel - Stack Overflow
Viewing all articles
Browse latest Browse all 6382

How to debug the below DPC++ program with the kernel offloaded to the GPU?

$
0
0

I want to run a DPC++ program in Intel GNU Project Debugger. I have downloaded the Intel GDB from Intel OneAPI Basekit. It comes preinstalled with OneAPI Basekit.

The link to download is :

[https://software.intel.com/content/www/us/en/develop/tools/oneapi/base-toolkit.html#gs.ynm6aj]

How to debug the below DPC++ program with the kernel offloaded to the GPU? How to switch between the inferiors and threads? Please review the code provided below.

#include <CL/sycl.hpp>#include <iostream>// Location of file: <oneapi-root>/dev-utilities/<version>/include#include "dpc_common.hpp"#include "selector.hpp"using namespace std;using namespace sycl;// A device function, called from inside the kernel.static size_t GetDim(id<1> wi, int dim) {  return wi[dim];}int main(int argc, char *argv[]) {  constexpr size_t length = 64;  int input[length];  int output[length];  // Initialize the input  for (int i = 0; i < length; i++)    input[i] = i + 100;  try {    CustomSelector selector(GetDeviceType(argc, argv));    queue q(selector, dpc_common::exception_handler);    cout << "[SYCL] Using device: ["<< q.get_device().get_info<info::device::name>()<< "] from ["<< q.get_device().get_platform().get_info<info::platform::name>()<< "]\n";    range data_range{length};    buffer buffer_in{input, data_range};    buffer buffer_out{output, data_range};    q.submit([&](auto &h) {      accessor in(buffer_in, h, read_only);      accessor out(buffer_out, h, write_only);      // kernel-start      h.parallel_for(data_range, [=](id<1> index) {        size_t id0 = GetDim(index, 0);        int element = in[index];  // breakpoint-here        int result = element + 50;        if (id0 % 2 == 0) {          result = result + 50;  // then-branch        } else {          result = -1;  // else-branch        }        out[index] = result;      });      // kernel-end    });    q.wait_and_throw();  } catch (sycl::exception const& e) {    cout << "fail; synchronous exception occurred: " << e.what() << "\n";    return -1;  }  // Verify the output  for (int i = 0; i < length; i++) {    int result = (i % 2 == 0) ? (input[i] + 100) : -1;    if (output[i] != result) {      cout << "fail; element " << i << " is " << output[i] << "\n";      return -1;    }  }  cout << "success; result is correct.\n";  return 0;}

Viewing all articles
Browse latest Browse all 6382

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>