Lines Matching refs:ffrt
113 > C++ API采用接近C++11的命名风格,以`ffrt`命名空间替代`std`命名空间
122 * 建议FFRT任务上下文使用ffrt::mutex替代std::mutex
123 * API上,二者仅在命令空间上有差异,可平滑替换(ffrt::mutex可在非ffrt task中调用,效果与普通的锁一致)
124 * ffrt::mutex相对std::mutex开销更小,且不会阻塞FFRT的worker线程(提交到FFRT的任务中大量使用std::mutex有FFRT worker线程被耗尽而死锁的风险)
129 namespace ffrt {
150 * `注意`:该依赖值本质上是一个数值,ffrt没办法区分该值是合理的还是不合理的,会假定输入的值是合理的进行处理;但不建议采用NULL,1, 2 等值来建立依赖关系,建议采用实际的内存地址,因为前…
195 #include "ffrt.h"
201 ffrt::submit([i] { std::cout << "num: " << i << std::endl; });
203 ffrt::wait();
212 2) ffrt::submit 为异步下发,因此,Task2 并不会等到 Task1 执行完成之后再下发;
214 3) ffrt::wait 用于实现待所有Task 都执行完成之后 main 函数再退出;
244 #include "ffrt.h"
249 ffrt::submit([&] {x = 100; std::cout << "x:" << x << std::endl;}, {}, {&x});
250 ffrt::submit([&] {std::cout << "x:" << x << std::endl;}, {&x}, {});
251 ffrt::submit([&] {std::cout << "x:" << x << std::endl;}, {&x}, {});
252 ffrt::submit([&] {x++; std::cout << "x:" << x << std::endl;}, {}, {&x});
253 ffrt::submit([&] {x++; std::cout << "x:" << x << std::endl;}, {}, {&x});
255 ffrt::wait();
276 #include "ffrt.h"
280 ffrt::submit([&] {
282 ffrt::submit([&] {std::cout << "nested task 1.1" << std::endl;}, {}, {});
283 ffrt::submit([&] {std::cout << "nested task 1.2" << std::endl;}, {}, {});
284 ffrt::wait();
287 ffrt::submit([&] {
289 ffrt::submit([&] {std::cout << "nested task 2.1" << std::endl;}, {}, {});
290 ffrt::submit([&] {std::cout << "nested task 2.2" << std::endl;}, {}, {});
291 ffrt::wait();
293 ffrt::wait();
321 namespace ffrt {
377 #include "ffrt.h"
385 ffrt::submit([&] {fib_ffrt(x - 1, y1);}, {&x}, {&y1} );
386 ffrt::submit([&] {fib_ffrt(x - 2, y2);}, {&x}, {&y2} );
387 ffrt::wait({&y1, &y2});
395 ffrt::submit([&] { fib_ffrt(10, r); }, {}, {&r});
396 ffrt::wait({&r});
418 namespace ffrt {
459 #include "ffrt.h"
463 ffrt::submit([] { std::cout << "hello ffrt" << std::endl; }, {}, {},
464 ffrt::task_attr().qos(ffrt::qos_background));
465 ffrt::wait();
483 namespace ffrt {
537 #include "ffrt.h"
542 …ffrt::task_handle h = ffrt::submit_h([] { std::cout << "hello "; }); // not need some data in this…
544 ffrt::submit([&] { x++; }, {}, {&x});
545 …ffrt::submit([&] { std::cout << "world, x = " << x << std::endl; }, {&x, h}); // this task depend …
548 ffrt::task_handle h2 = ffrt::submit_h([&] { std::cout << "handle wait" << std::endl; x++; });
549 ffrt::wait({h2});
551 ffrt::wait();
573 namespace ffrt {
598 #include "ffrt.h"
602 ffrt::submit([] { std::cout << "task id: " << ffrt::this_task::get_id() << std::endl; });
603 ffrt::submit([] { std::cout <<"task id: " << ffrt::this_task::get_id() << std::endl; });
604 ffrt::wait();
605 std::cout << "task id: " << ffrt::this_task::get_id() << std::endl;
627 namespace ffrt {
655 #include "ffrt.h"
659 ffrt::submit([] {
661 … std::cout << "return " << ffrt::this_task::update_qos(ffrt::qos_user_initiated) << std::endl;
664 ffrt::wait();
665 std::cout << "return " << ffrt::this_task::update_qos(ffrt::qos_user_initiated) << std::endl;
707 namespace ffrt {
735 namespace ffrt {
756 namespace ffrt {
779 namespace ffrt {
797 namespace ffrt {
814 #include "ffrt.h"
819 ffrt::queue q("test_queue", ffrt::queue_attr().qos(ffrt::qos_utility));
829 task_handle t2 = q.submit_h([&x] { x += 10; }, ffrt::task_attr().delay(1000));
845 * 同步原语,任务中如果使用了 std::mutex/std::shared_mutex/std::condition_variable等std同步原语,会影响协程效率,需修改ffrt同步原语。
847 …当前FFRT仅支持ffrt::mutex / ffrt::shared_mutex / ffrt::recursive_mutex / ffrt::condition_variable,用法和st…
851 …例如SA业务,会在全局变量中管理串行队列。由于进程会先卸载libffrt.so再释放全局变量,如果进程结束时,SA未显式释放持有的队列,队列将随全局变量析构,析构时会访问已释放的ffrt资源,导致…
853 * 不允许再串行任务中调用ffrt::submit和ffrt::wait,其行为是未定义的
855 * 不允许使用ffrt::wait等待一个串行任务
866 namespace ffrt {
886 namespace ffrt {
904 namespace ffrt {
920 namespace ffrt {
938 namespace ffrt {
954 namespace ffrt {
972 namespace ffrt {
988 #include "ffrt.h"
997 ffrt::queue q1("test_queue", queue_attr().qos(qos_utility));
1001 ffrt::queue q2("test_queue", ffrt::queue_attr().timeout(1000).callback(callbackFunc));
1017 namespace ffrt {
1045 #include "ffrt.h"
1050 ffrt::mutex mtx;
1052 ffrt::submit([&sum, i, &mtx] {
1058 ffrt::wait();
1065 ffrt::submit(ffrt_mutex_task);
1066 ffrt::wait();
1086 namespace ffrt {
1123 ffrt::shared_mutex mtx;
1125 ffrt::submit([&sum, i, &mtx] {
1131 ffrt::submit([&sum, j, &mtx] {
1138 ffrt::wait();
1145 ffrt::submit(ffrt_shared_mutex_task);
1146 ffrt::wait();
1167 namespace ffrt {
1228 #include "ffrt.h"
1232 ffrt::condition_variable cond;
1234 ffrt::mutex lock_;
1235 ffrt::submit([&] {
1240 ffrt::submit([&] {
1246 ffrt::wait();
1252 ffrt::submit(ffrt_cv_task);
1253 ffrt::wait();
1277 namespace ffrt {
1312 #include "ffrt.h"
1317 ffrt::submit([] {
1320 ffrt::this_task::sleep_for(2000ms);
1325 ffrt::wait();
1344 namespace ffrt {
1367 #include "ffrt.h"
1377 ffrt::this_task::yield();
1383 ffrt::submit([] { little_sleep(200us); });
1384 ffrt::wait();
1402 * 该接口为ffrt动态库的导出接口,基于此可以封装出不同的C++ API ffrt::submit和C API ffrt_submit,满足二进制兼容
1457 …unction_storage_base申请的内存为ffrt_auto_managed_function_storage_size字节,其生命周期归ffrt管理,在该task结束时,由FFRT自动…
1570 #include "ffrt.h"
1707 #include "ffrt.h"
1725 #include "ffrt.h"
1800 #include "ffrt.h"
1804 printf("hello ffrt\n");
1906 * C API中的ffrt_task_handle_t的使用与C++ API中的ffrt::task_handle相同
1915 #include "ffrt.h"
2218 #include "ffrt.h"
2220 using namespace ffrt;
2402 #include "ffrt.h"
2404 using namespace ffrt;
2425 …ffrt_queue_attr_set_callback(&queue_attr, ffrt::create_function_wrapper(basicFunc, ffrt_function_k…
2505 #include "ffrt.h"
2879 #include "ffrt.h"
3039 #include "ffrt.h"
3140 W C01719/ffrt: 60500:RecordSymbolAndBacktrace:159 Tid[16579] function occupies worker for more than…
3141 W C01719/ffrt: 60501:RecordSymbolAndBacktrace:164 Backtrace:
3142 W C01719/ffrt: #00 pc 00000000000075f0 /system/lib64/module/file/libhash.z.so
3143 W C01719/ffrt: #01 pc 0000000000008758 /system/lib64/module/file/libhash.z.so
3144 W C01719/ffrt: #02 pc 0000000000012b98 /system/lib64/module/file/libhash.z.so
3145 W C01719/ffrt: #03 pc 000000000002aaa0 /system/lib64/platformsdk/libfilemgmt_libn.z.so
3146 W C01719/ffrt: #04 pc 0000000000054b2c /system/lib64/platformsdk/libace_napi.z.so
3147 W C01719/ffrt: #05 pc 00000000000133a8 /system/lib64/platformsdk/libuv.so
3148 W C01719/ffrt: #06 pc 00000000000461a0 /system/lib64/chipset-sdk/libffrt.so
3149 W C01719/ffrt: #07 pc 0000000000046d44 /system/lib64/chipset-sdk/libffrt.so
3150 W C01719/ffrt: #08 pc 0000000000046a6c /system/lib64/chipset-sdk/libffrt.so
3151 W C01719/ffrt: #09 pc 00000000000467b0 /system/lib64/chipset-sdk/libffrt.so
3173 * FFRT的头文件为`ffrt.h`,内部包含了C++ API,C API和C base API
3174 * ffrt.h 定义为:
3214 namespace ffrt {
3302 【建议3】:尽可能尝试通过 inDeps/outDeps 表达依赖,而不是使用 ffrt::wait()。
3304 这是因为 FFRT 跟踪和处理 inDeps/outDeps 比调用显式 ffrt::wait() 函数更自然、更便宜。
3320 【建议6】:在需要时,使用 ffrt::wait() 确保栈变量的生命周期。
3322 如果子任务使用驻留在父任务栈上的数据,则父任务应避免在子任务执行完成前返回。在父任务的末尾添加 ffrt::wait() 可以解决这个问题。
3400 ffrt::submit(gpuPreTask, {input + i}, {pre_outbuf + buf_id});
3401 ffrt::submit(npuTask, {pre_outbuf + buf_id}, {npu_outbuf + buf_id});
3402 ffrt::submit(gpuPostTask, {npu_outbuf + buf_id}, {output + i});
3405 ffrt::wait();
3478 * 通过ffrt::submit()接口以异步任务方式提交函数执行
3479 * 将函数访问的数据对象以及访问方式在ffrt::submit()接口中的in_deps/out_deps参数表达
3498 * 同步方式执行小粒度任务,不发送给FFRT异步执行。需注意和异步任务之间的数据同步问题,在需要同步的地方插入ffrt::wait()
3502 #include "ffrt.h"
3509 ffrt::submit([&] {fib_ffrt1(x - 1, y1);}, {&x}, {&y1} );
3510 ffrt::submit([&] {fib_ffrt1(x - 2, y2);}, {&x}, {&y2} );
3511 ffrt::submit([&] {y = y1 + y2;}, {&y1, &y2}, {} );
3512 ffrt::wait();
3522 ffrt::submit([&] {fib_ffrt2(x - 1, y1);}, {&x}, {&y1} );
3523 ffrt::submit([&] {fib_ffrt2(x - 2, y2);}, {&x}, {&y2} );
3524 ffrt::wait({&y1, &y2});
3536 * 解决方法1:父任务中增加ffrt::wait()等待子任务完成
3539 #include "ffrt.h"
3546 ffrt::submit([&] {fib_ffrt(x - 1, y1);}, {&x}, {&y1} );
3547 ffrt::submit([&] {fib_ffrt(x - 2, y2);}, {&x}, {&y2} );
3548 ffrt::submit([&] {y = y1 + y2;}, {&y1, &y2}, {} );
3549 ffrt::wait(); // 用于保证y1 y2的生命周期
3557 #include "ffrt.h"
3566 ffrt::submit([=] {fib_ffrt(x - 1, y1);}, {}, {y1} );
3567 ffrt::submit([=] {fib_ffrt(x - 2, y2);}, {}, {y2} );
3568 ffrt::submit([=] {*y = *y1 + *y2; }, {y1, y2}, {} );
3569 ffrt::wait();
3618 ## 不支持用户在fork出的子进程内使用ffrt
3624 ## C API中初始化ffrt对象后,对象的置空与销毁由用户负责
3626 * 为保证较高的性能,ffrt的C API中内部不包含对对象的销毁状态的标记,用户需要合理地进行资源的释放,重复调用各个对象的destroy操作,其结果是未定义的
3630 #include "ffrt.h"
3643 #include "ffrt.h"
3655 #include "ffrt.h"