supersat commented on code in PR #11018:
URL: https://github.com/apache/tvm/pull/11018#discussion_r853445087
##########
src/runtime/threading_backend.cc:
##########
@@ -34,13 +34,61 @@
#endif
#if defined(__hexagon__)
#include <dlfcn.h>
+#include <qurt.h>
+#include <stdlib.h>
+#define HEXAGON_STACK_SIZE 65536
+#define HEXAGON_STACK_ALIGNMENT 32
#endif
#include <algorithm>
#include <thread>
#define CURRENT_THREAD_HANDLE (static_cast<std::thread::native_handle_type>(0))
namespace tvm {
namespace runtime {
namespace threading {
+#ifdef __hexagon__
+// pthreads are broken on older versions of qurt, so
+// we need to use native APIs instead of std::threads
+class QuRTThread {
+ typedef std::function<void()> Callback;
+
+ public:
+ explicit QuRTThread(Callback worker_callback) : f(worker_callback) {
+ static int id = 1;
+ qurt_thread_attr_t attr;
+ char name[32];
+ posix_memalign(&stack, HEXAGON_STACK_ALIGNMENT, HEXAGON_STACK_SIZE);
+ qurt_thread_attr_init(&attr);
+ qurt_thread_attr_set_stack_size(&attr, HEXAGON_STACK_SIZE);
+ qurt_thread_attr_set_stack_addr(&attr, stack);
+ snprintf(name, sizeof(name), "worker %d", id++);
+ qurt_thread_attr_set_name(&attr, name);
+ qurt_thread_create(&thread, &attr, (void (*)(void*))run_func, this);
+ }
+ QuRTThread(QuRTThread&& other) : thread(other.thread), f(other.f),
stack(other.stack) {
+ other.thread = 0;
+ }
+ ~QuRTThread() {
+ if (thread) {
+ join();
+ free(stack);
+ }
+ }
+ bool joinable() const { return qurt_thread_get_id() != thread; }
+ void join() {
+ int status;
+ qurt_thread_join(thread, &status);
+ }
+
+ private:
+ static void run_func(QuRTThread* t) {
+ t->f();
+ qurt_thread_exit(QURT_EOK);
+ }
+ qurt_thread_t thread;
+ Callback f;
+ void* stack;
Review Comment:
thread_, f_, and stack_ have been renamed.
Now that the return value of posix_memalign is checked, stack_ is guaranteed
to be initialized.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]