Skip to content

SYCL spec example throw an instance of 'sycl::_v1::invalid_parameter_error' #7568

Closed
@wangzy0327

Description

@wangzy0327

Describe the bug
terminate called after throwing an instance of 'sycl::_V1::invalid_parameter_error'
what(): Index out of range -30 (PI_ERROR_INVALID_VALUE)

ref

To Reproduce
Please describe the steps to reproduce the behavior:

These are my example code;

my example code
#include <sycl/sycl.hpp>
#include <iostream>
#include <random>

using namespace sycl;

constexpr size_t N = 10;

class RandomFiller {
 public:
  RandomFiller(accessor<int> ptr)
      : ptr_ { ptr } {
    std::random_device hwRand;
    std::uniform_int_distribution<> r { 1, 100 };
    randomNum_ = r(hwRand);
  }
  void operator()(item<1> item) const { ptr_[item.get_id()] = get_random(); }
  int get_random() const { return randomNum_; }

 private:
  accessor<int> ptr_;
  int randomNum_;
};

void workFunction(buffer<int, 1>& b, queue& q, const range<1> r) {
  q.submit([&](handler& cgh) {
    accessor ptr { b, cgh };
    RandomFiller filler { ptr };

    cgh.parallel_for(r, filler);
  });
}

int main(){
    queue myQueue;
    auto myContext = myQueue.get_context();
    auto myDev = myQueue.get_device();

    range<1> r { N };

    buffer<int, 1> a { r };

    auto exeBundle = get_kernel_bundle<bundle_state::executable>(myContext);
    
    std::vector<kernel_id> execKernelIds = exeBundle.get_kernel_ids();
    std::cout<<"executable kernel size : "<<execKernelIds.size()<<std::endl;
    for(auto kernel_id : execKernelIds){
        std::cout<<"exec kernel id name : "<<kernel_id.get_name()<<std::endl;
        kernel myKernel = exeBundle.get_kernel<bundle_state::executable>(kernel_id);
        std::cout<<"exec kernel id info function_name : "<<myKernel.get_info<info::kernel::function_name>()<<std::endl;
        std::cout<<"exec kernel id info reference count : "<<myKernel.get_info<info::kernel::reference_count>()<<std::endl;
        std::cout<<"exec kernel id info num_args : "<<myKernel.get_info<info::kernel::num_args>()<<std::endl;
        std::cout<<"exec kernel id info attributes : "<<myKernel.get_info<info::kernel::attributes>()<<std::endl;
        std::cout<<std::endl;
    }

    workFunction(a,myQueue,r);

    myQueue.wait();

    host_accessor rand {a,read_only};
    std::cout << std::endl << "Result:" << std::endl;
    for (size_t i = 0; i < N; i++) {
        std::cout<<"random array r["<<i<<"] = "<<r[i]<<std::endl;
        // std::cout<<"B B["<<i<<"] = "<<B[i]<<std::endl;
        // std::cout<<"C C["<<i<<"] = "<<C[i]<<std::endl;
        // Compare the result to the analytic value
        if (r[i] <= 0 || r[i] >= 100) {
            std::cout << "Wrong value " << r[i] << " on element " << i << " " << std::endl;
            exit(-1);
        }
    }
    std::cout << "Good Random distribution !" << std::endl;
    return 0;
}

CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)

set(DPCPP_HOME "/home/wzy/sycl_workspace")
set(DPCPP_SYCL_HOME "${DPCPP_HOME}/build-cuda-2022-09-debug")
# set(DPCPP_SYCL_HOME "${DPCPP_HOME}/build-cuda-2022-09")

set(CMAKE_C_COMPILER "${DPCPP_SYCL_HOME}/bin/clang")
set(CMAKE_CXX_COMPILER "${DPCPP_SYCL_HOME}/bin/clang++")
set(CMAKE_CXX_STANDARD 17)

project(function-objects)


include_directories("${DPCPP_SYCL_HOME}/include/sycl")
include_directories("${DPCPP_SYCL_HOME}/include")

message(STATUS "dpcpp_home : ${DPCPP_HOME}")
message(STATUS "dpcpp_cuda_sycl_home : ${DPCPP_SYCL_HOME}")


message(STATUS "find library path : ${DPCPP_SYCL_HOME}/lib")
set(CMAKE_BUILD_RPATH "${DPCPP_SYCL_HOME}/lib;${CMAKE_BUILD_RPATH}")
message(STATUS "cmake build rpath : ${CMAKE_BUILD_RPATH}")


set(CMAKE_BUILD_TYPE "Debug")
# set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-fsycl -fsycl-targets=nvptx64-nvidia-cuda")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb -std=c++17")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall -std=c++17")


link_directories("${DPCPP_SYCL_HOME}/lib")

aux_source_directory(. DIR_SRCS)
add_executable(function-objects ${DIR_SRCS})
target_include_directories(function-objects PRIVATE "${DPCPP_SYCL_HOME}/include/sycl")
target_include_directories(function-objects PRIVATE "${DPCPP_SYCL_HOME}/include")
target_link_libraries(function-objects PRIVATE sycl)

image

Environment (please complete the following information):

  • OS: Linux
  • Target device and vendor:Nvidia GPU
  • DPC++ version:Clang++ 16 2022-09
  • Dependencies version: cuda 11.2

Additional context

There are other problem.

1、what the mean of myKernel.get_infoinfo::kernel::num_args() ? Is parallel_for funcion object operator () arguments ?
2、why the kernel size from bundle_kernel not equals queue submit kernel size ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions