ContributionsMost RecentMost LikesSolutionsRe: Memory attributes for device_global Hello I've tried several things. I assumed those attributes must be applied to device_global declaration directly. Here is some tests: // error: 'private_copies' attribute only applies to local non-const variables and non-static data members [[intel::private_copies(2)]] sycl::ext::oneapi::experimental::device_global<int, FPGAProperties> value; // error: 'fpga_register' attribute only applies to constant variables, local variables, static variables, and non-static data members [[intel::fpga_register]] sycl::ext::oneapi::experimental::device_global<int, FPGAProperties> value; // no errors, but based on report - attribute wasn't applied [[intel::fpga_register]] static sycl::ext::oneapi::experimental::device_global<int, FPGAProperties> value; Re: Memory attributes for device_global Hello Thank you for your response. Yes, I need to implement the variable in the onchip memory and it can be achieved with device_global. But I am not able to apply any memory attributes to this device_global variable, for example [[intel::fpga_register]], [[intel::singlepump]], etc. Can you please clarify if applying such attributes is possible in this case? Memory attributes for device_global I am migrating IP component from HLS to oneAPI. The component is basic exponential moving average filtering. Implementation has state, which is saved between invocation. In HLS this can be achieved using static variable inside function. Based on my research in oneAPI the recommended way is to to use device_global memory (see FPGA Optimization Guide for Intel® oneAPI Toolkits - device_global Extension). using FPGAProperties = decltype(sycl::ext::oneapi::experimental::properties( sycl::ext::oneapi::experimental::device_image_scope, sycl::ext::oneapi::experimental::host_access_none)); // Not able to apply memory attributes here // [[intel::fpga_register]] sycl::ext::oneapi::experimental::device_global<int, FPGAProperties> last; struct ExpKernel { float sample; void operator()() const { last = 0.5f * last + 0.5f * sample; OutputPipe::write(last); } }; This works as expected and generates device scoped memory. But I am not able to apply any memory attributes to this memory, like forcing registers or specifying bankwidth. So my questions are: 1. How to apply memory attributes to device_global? 2. Is it the only way to achieve saving state across multiple invocations (besides using global memory)