Skip to content

Steal-able tasks/Task Queue + undefined behavior handler #62

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 26 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0c7404b
stopping point
stevenqie Apr 30, 2025
d830a5d
resolved linker errors
stevenqie May 1, 2025
a82ddbe
Merge branch 'main' into sq-taskqueue
stevenqie May 1, 2025
40421c2
Merge branch 'main' into sq-taskqueue
stevenqie May 4, 2025
9214c34
consildate everything into just converse_itnernal and convcore
stevenqie May 4, 2025
4439108
print statements
stevenqie May 5, 2025
557801e
Merge branch 'main' into sq-taskqueue
stevenqie May 5, 2025
0fd0f7b
working with other examples now
stevenqie May 5, 2025
9c9f4c0
general layout
stevenqie May 5, 2025
30a5714
working example but not if you define k really big
stevenqie May 6, 2025
fd2b68f
undefined handler functionality + clean up comments
stevenqie May 6, 2025
34443d7
Merge branch 'main' into sq-taskqueue
stevenqie May 6, 2025
ca8e293
reordering
stevenqie May 6, 2025
1b94c90
try again
stevenqie May 6, 2025
feafc33
testing to see if build test passes now
stevenqie May 8, 2025
8fee676
try again
stevenqie May 8, 2025
4cd5fd7
remove lci1 test
ritvikrao May 8, 2025
ad5c110
example bug where stuff is hanging fixed
stevenqie May 8, 2025
48b7912
Merge branch 'sq-taskqueue' of https://github.com/charmplusplus/recon…
stevenqie May 8, 2025
51c6264
null check + start of CmiSynctaskQSendndFree
stevenqie May 8, 2025
34456fe
remove print statement + change to sendandfree
stevenqie May 8, 2025
ef9109d
task queue steal cange
stevenqie May 8, 2025
2a33291
change value of k
stevenqie May 8, 2025
3f4032b
add head check
stevenqie May 8, 2025
e806701
add task queu logic to csdschdulerpoll
stevenqie May 8, 2025
e510f1d
print statement remove
stevenqie May 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 0 additions & 52 deletions .github/workflows/ci-lci1.yml

This file was deleted.

1 change: 1 addition & 0 deletions examples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ add_subdirectory(reduction_node)
add_subdirectory(cth)
add_subdirectory(self_send)
add_subdirectory(ctv)
add_subdirectory(taskqueue)
1 change: 0 additions & 1 deletion examples/reduction_dual/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
add_reconverse_executable(reduction_dual reduction_dual.cpp)
add_test(NAME reduction_dual COMMAND reduction_dual +pe 7)
add_test(NAME reduction_dual-multinode COMMAND ${RECONVERSE_TEST_LAUNCHER} -n 2 $<TARGET_FILE:reduction_dual> +pe 4)
1 change: 1 addition & 0 deletions examples/taskqueue/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add_reconverse_executable(taskqueue taskqueue.cpp)
23 changes: 23 additions & 0 deletions examples/taskqueue/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Compiler and flags
CXX := g++
CXXFLAGS := -std=c++11 -pthread -I ../..

# Source files
SRCS := taskqueue.cpp ../../convcore.cpp ../../scheduler.cpp ../../queue.cpp ../../conv-conds.cpp
HDRS := ../../converse_internal.h ../../scheduler.h ../../queue.h ../../barrier.h

# Output executable
TARGET := test

# Default target
all: $(TARGET)

# Link the object files to create the executable
$(TARGET): $(SRCS)
$(CXX) -o $@ $^ $(CXXFLAGS)

# Clean up build files
clean:
rm -f $(TARGET)

.PHONY: all clean
69 changes: 69 additions & 0 deletions examples/taskqueue/taskqueue.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include "converse.h"
#include <pthread.h>
#include <stdio.h>
#include <atomic>

#define K 2000 // will tend to abort if your k value is too high (higher than the max task queue size)
#define X 10000

thread_local int tasksExecuted = 0;
static std::atomic<int> globalCounter{K};

int handlerID;
int print_handlerID;

struct Message {
CmiMessageHeader header;
int data[1];
};

void print_results_handler_func(void* vmsg) {
printf("PE %d executed %d tasks.\n", CmiMyRank(), tasksExecuted);
CmiNodeBarrier();
if (CmiMyRank() == 0) {
CmiExit(0);
}
}

void handler_func(void *vmsg) {
Message* incoming_msg = (Message*)vmsg;
//printf("PE %d pinged this function with data index: %d.\n", CmiMyRank(), incoming_msg->data[0]);

// do dummy work
for (int i = 0; i < X; i++) {
CmiWallTimer();
}

tasksExecuted++;

int prev = globalCounter.fetch_sub(1, std::memory_order_acq_rel);
//CmiPrintf("Current globalCounter: %d\n", prev - 1);
if (prev == 1) {
Message* msg = new Message;
msg->header.handlerId = print_handlerID;
msg->header.messageSize = sizeof(Message);
printf("All tasks have been executed.\n");
CmiSyncBroadcastAllAndFree(sizeof(Message), msg);
}
}

CmiStartFn mymain(int argc, char **argv) {
handlerID = CmiRegisterHandler(handler_func);
print_handlerID = CmiRegisterHandler(print_results_handler_func);

if (CmiMyPe() == 0) {
for (int i = 0; i < K; i++) {
Message* newmsg = new Message;
newmsg->data[0] = i;
newmsg->header.messageSize = sizeof(Message);
newmsg->header.handlerId = handlerID;
CmiSyncTaskQSendAndFree(CmiMyRank(), sizeof(Message), newmsg);
}
}
return 0;
}

int main(int argc, char **argv) {
ConverseInit(argc, argv, (CmiStartFn)mymain);
return 0;
}
3 changes: 3 additions & 0 deletions include/converse.h
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,9 @@ void CmiFreeSendFn(int destPE, int messageSize, char *msg);
void CmiSyncListSendFn(int npes, const int *pes, int len, char *msg);
void CmiFreeListSendFn(int npes, const int *pes, int len, char *msg);

void CmiSyncTaskQSend(int destPE, int messageSize, void *msg);
void CmiSyncTaskQSendAndFree(int destPE, int messageSize, void *msg);

// broadcasts
void CmiSyncBroadcast(int size, void *msg);
void CmiSyncBroadcastAndFree(int size, void *msg);
Expand Down
Loading