提问人:Mehran Khazaeizadeh 提问时间:8/16/2022 更新时间:8/18/2022 访问量:77
是否可以在不复制数据的情况下使用 CPU 后端访问 arrayfire 的数据存储器?
Is it possible to access arrayfire's data memory using CPU backend without data copy?
问:
我想在 CPU 模式 (mkl) 下使用 arrayfire,以便能够在没有传输的情况下访问数据,因为 GPU 数据可能会发生这种情况。
有没有办法直接访问arrayfire的数据存储器(只使用CPU黑化)?
答:
2赞
Umar Arshad
8/18/2022
#1
您可以通过调用 device() 成员函数来访问对象的数据。这将使您能够直接访问数据,除非它被另一个数组引用,或者它是另一个数组的子数组/视图。在这些情况下,数据将被复制。af::array
af::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
谢谢。我将在这里创建一个新问题。
评论