最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

NAPI AsyncWorker:变换一个指针数组来那匹::阵列,而无需使用大的呢?

IT培训 admin 0浏览 0评论

NAPI AsyncWorker:变换一个指针数组来那匹::阵列,而无需使用大的呢?

你好吗?我怎样才能改变一个指向那匹::阵列没有for抑或是有可能的最快?

第二个问题:从指针到转型是Napi::Array在工作线程ȮnOk或者是已经在主线程?


第一个问题:我能解决这个问题,但问题是,有转型,开始我改造GPU ArrayFire arraypointer,然后我要创建一个for,然后创建Napi::Array,对我来说,它看起来不正确的。有没有更好的解决办法?我是否可以使用pointerNapi::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();
}
回答如下:

实际上,没有办法使用的缓冲液为一个数组。我的意思是,将使用浮动的ArrayBuffer,但你必须在对的NodeJS从缓冲区转换成数组进行改造,所以最快的转换是纯C ++和使用循环。

NAPI AsyncWorker:变换一个指针数组来那匹::阵列,而无需使用大的呢?

你好吗?我怎样才能改变一个指向那匹::阵列没有for抑或是有可能的最快?

第二个问题:从指针到转型是Napi::Array在工作线程ȮnOk或者是已经在主线程?


第一个问题:我能解决这个问题,但问题是,有转型,开始我改造GPU ArrayFire arraypointer,然后我要创建一个for,然后创建Napi::Array,对我来说,它看起来不正确的。有没有更好的解决办法?我是否可以使用pointerNapi::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();
}
回答如下:

实际上,没有办法使用的缓冲液为一个数组。我的意思是,将使用浮动的ArrayBuffer,但你必须在对的NodeJS从缓冲区转换成数组进行改造,所以最快的转换是纯C ++和使用循环。

发布评论

评论列表 (0)

  1. 暂无评论