是否可以在不复制数据的情况下使用 CPU 后端访问 arrayfire 的数据存储器?

Is it possible to access arrayfire's data memory using CPU backend without data copy?

提问人:Mehran Khazaeizadeh 提问时间:8/16/2022 更新时间:8/18/2022 访问量:77

问:

我想在 CPU 模式 (mkl) 下使用 arrayfire,以便能够在没有传输的情况下访问数据,因为 GPU 数据可能会发生这种情况。

有没有办法直接访问arrayfire的数据存储器(只使用CPU黑化)?

阵列火

评论


答:

2赞 Umar Arshad 8/18/2022 #1

您可以通过调用 device() 成员函数来访问对象的数据。这将使您能够直接访问数据,除非它被另一个数组引用,或者它是另一个数组的子数组/视图。在这些情况下,数据将被复制。af::arrayaf::array

例:

array data = randu(10);
float* data_ptr = data.device<float>();

data_ptr[5] = 1337;
data.unlock();
af_print(data);
#+RESULTS:
data
[10 1 1 1]
    0.6010 
    0.0278 
    0.9806 
    0.2126 
    0.0655 
 1337.0000 
    0.2864 
    0.3410 
    0.7509 
    0.4105 

评论

1赞 Mehran Khazaeizadeh 8/24/2022
嗨,又来了。我按照你说的做了,但现在我有一个新问题:我使用 af::constant 创建了我的数组,然后我按照你说的做了,现在当我打印修改后的数组时,它仍然是 0(它在调试模式下只更改了一次,但大多数时候它没有。
1赞 Umar Arshad 9/2/2022
你能给我发一个代码片段吗?我认为您需要创建一个新的 StackOverflow 问题或转到 ArrayFire slack 频道并在那里提出您的问题。
1赞 Mehran Khazaeizadeh 9/2/2022
谢谢。我将在这里创建一个新问题。