Hello, I'm trying to write a program that calculates up to a 1024 x 1024 matrix using multi-threading. For example, I need to run a 1024 x 1024 using 256, 64, 16 or 4 threads. Or I need to run a 64 x 64 matrix using 16 or 4 threads. All the Matrices are square. I thought I coded my program correctly, however I get a segmentation fault when I use a 720 x 720 matrix or higher, heres the code.
The main problem is that you're overflowing the stack by allocating a huge matrix on it. Move to dynamic memory.
1. Unless you have 256 physical processors, you're not using threads properly.
2. Your matrix_multi() never uses its parameters. You're just using more threads without dividing any work.
3. You're using malloc() for no apparent reason.
4. You're passing to a thread a pointer to a pointer that will likely go out of scope before the thread can use it. (See line 65. You're passing &data instead of data, which is what you should be passing.)
5. It's usually not a good idea to parallelize matrix operations across more than one dimension. For example, if you need to add two matrices on n threads, divide the destination matrix every height/n rows and give each thread those rows only. That will greatly simplify your code. Alternatively:
1. You start with threads [0;n-1].
2. Thread i starts processing at row i.
3. Once it's done it advances by n rows.
For n=4: thread 0 processes rows 0, 4, 8, ...; thread 1 processes rows 1, 5, 9, ...; and so on.