你好吗?如何在没有Napi::Array
的情况下将指针转换为Napi :: Arrray,或者它是最快的呢?
第二个问题:从指针到ȮnOk
的转换是工作线程中的GPU ArrayFire array
还是已经在主线程中?
第一个问题:我能够解决它,但问题是存在转换,首先将pointer
转换为for
,然后得到创建Napi::Array
,然后创建pointer
,对我来说似乎不正确。有更好的解决方案吗?我可以以某种方式将Napi::Array
用于OnOk
吗???
第二:我必须执行ArrayFire
方法从Napi
到OnOk
的转换。是在OnOk
的主线程上还是在工作线程上?因为我必须在Env()
中创建3000转换,因为Execute
方法中OnOk
不可用,所以只能在#include <iostream>
#include <vector>
#include <arrayfire.h>
#include <napi.h>
#include "test.h"
using std::cout;
using std::vector;
using namespace af;
using namespace Napi;
#define POINTS 1000
class ArrayTestWorker : public Napi::AsyncWorker {
public:
ArrayTestWorker(Napi::Function& callback) : Napi::AsyncWorker(callback) {
}
~ArrayTestWorker() {}
void Execute () {
try {
// int points = 200;
x = randu(POINTS);
y = randu(POINTS);
z = randu(POINTS);
} catch (af::exception& e) {
Napi::AsyncWorker::SetError(e.what());
}
}
void Transform(array& arr, Napi::Array& napiArr) {
int count = arr.elements();
float *host_a = arr.host<float>();
cout << "elements: " << count << "\n";
for(int i = 0; i < count; i++) {
cout << i << " - i , element: " << host_a[i] << "\n";
napiArr[i] = host_a[i];
}
freeHost(host_a);
}
void OnOK() {
Napi::HandleScope scope(Env());
Napi::Object obj = Napi::Object::New(Env());
Napi::Array xArray = Napi::Array::New(Env(), x.elements());
Napi::Array yArray = Napi::Array::New(Env(), y.elements());
Napi::Array zArray = Napi::Array::New(Env(), z.elements());
Transform(x, xArray);
Transform(y, yArray);
Transform(z, zArray);
obj.Set("x-length", x.elements());
obj.Set("y-length", y.elements());
obj.Set("z-length", z.elements());
obj.Set("x", xArray);
obj.Set("y", yArray);
obj.Set("z", zArray);
Callback().Call({Env().Undefined(), obj});
}
private:
array x;
array y;
array z;
};
Napi::Value ArrayFireTestAsync(const Napi::CallbackInfo& info) {
//int points = info[0].As<Napi::Number>().Uint32Value();
Napi::Function callback = info[0].As<Napi::Function>();
ArrayTestWorker* testWorker = new ArrayTestWorker(callback);
testWorker->Queue();
return info.Env().Undefined();
}
上使用,我不想阻止该事件循环...
from IPython.display import SVG
from keras.utils import model_to_dot
SVG(model_to_dot(model).create(prog='dot', format='svg'))
答案 0 :(得分:0)
实际上,没有办法将缓冲区用作数组。我的意思是,它将使用float的ArrayBuffer,但是随后您必须在NodeJs中进行转换才能从缓冲区转换为数组,因此最快的转换是在纯C ++上并使用循环。