I'm trying to optimize this code using openMP. The line I added made it run about twice as fast but I'm trying to figure out how to make it even faster. Could reshaping the loops potentially increase the speed?
//4 threads
int listsize=15000;
#pragma omp parallel for shared(f) private(i,j,hash)
for(i = 0; i < listsize; i++) {
printf("Thread: %d i: %zu wl_size: %zu
",omp_get_thread_num(),i,wl_size);
for (j = 0; j < num; j++) {
h = f[j] (getw(list, i));
c[h] = 1;
} }
I have this code which performs the analysis part of discrete wavelet transform. It works pretty well. However, I wish to reduce the time that it consumes even further. I did use reserve() and it worked upto few msec.
int rows = signal.size(); int cols = signal[0].size(); int cols_lp1 =(int) ceil( (double) cols / 2); vector<vector<double> > lp_dn1(rows, vector<double>(cols_lp1)); vector<double> temp_row; temp_row.reserve(512);
I have a 125X125 array, each element is 55 bits. The cache line for the CPU ( Cortex A9) is 32 bits. Is there anyway to do optimizations, like loop tiling that would make multiplication and calculations faster?
I'm trying to write a program for a lab, I know how easy it is but cant see to crack it.
I need to make a program using while or for loop.
I must have the user type a number, for an input value an output value but then do it again several times but without it going on forever asking again and again.
I need to do make a loop inside a condition. Can it be done? I don't want to call another function to do it. Any way at all without calling separate function inside the if? I just want to do:
if ( for (int i = 0; i<=10; i++) { //stuff related to the for loop } ) { //stuff related to the initial if condition };
I have an exam in C programming I'm a little stuck on loops..I have to make a program that multiplies the loop variable by 2 then takes away 1... easy, that was a for loop no problem
for (x=3; x<=65; x=x*2-1)
that should print out 3 5 9 17 33 65 however, my lecturer has given the task for it to reverse, but not to display the number 17 on the way back down using an if statement...however, this time it must be a do while loop... This is what I have so far.
Code:
#include <stdio.h> #include <stdlib.h> int main() { int x = 129; }
I'm making a program for a MMO I play. It calculates the cash and resources needed to build certain 'modules'. I'm having trouble to do something very simple : make a loop until the user asks to break the loop. Here is what the interface looks like :
What module do you want to install?
(Examples: 'Avenger' or 'VLLT')
dd // I input this DD. COST each : 60,000 cr.
How many do you want? (Modules left:15) (NOTE : You may enter a negative number if you made a mistake) 3 // I input this Current Total Module Price : 180000 cr +6 droids
[Code] ....
The bigger code box below is a part of the code I made. What I deleted is uninteresting, it's just the same thing again : other resources, other 'modules'...
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { struct resources// Defines the amount of resources and their price
at this point run a loop for all players, in this loop use random to determine the face and depending on the face run a loop (for roll again etc) or give next user the chance.
And this loop is 2-12 people, all rolling die. They draw 3 die out of a cup of 12. Then they roll the 3 die, getting fish, hook, or boot on each die.
I wrote code that finds the number of prime numbers in a range entered by the user. Now I'm attempting to make it run in parallel with the number of threads I assign it to have. I'm using blocking technique, so I'm assigning, in this scenario, 4 threads - 1/4 of the numbers in the range to the first array, and the next 1/4 of the numbers in the range to the next array and so on. Then I want to execute the prime number counting code in parallel. I'm using openMP to do this. I'm having difficulty setting it all up properly. I have a little experience with pthreads but little with openMP and am struggling in how this should be done.
I am using map for assigning an identifiers for a line from file in c++. Also i am using IDs for a pattern in line {name, operator, val} which is separated by ';'. I am using read_pub() for calculating how many patterns are there in a line.
I am creating a reaction game using a series of lasers and LRDs and need to make a function which waits for a specific pin in portb to be triggered high before it can move onto waiting for the next pin to be triggered. The time lasped before the "game loses" needs to get exponentially faster as the game goes on.
I am using statements such as if(input(PIN_B0)==1 generate_tone(G_note[2], 1000); but unsure how to write in c "wait x amount of time, if trigger move onto next random pin or no trigger go to lose function.
is it better to reuse an existing variable or create a new variable for the following situation:
/* Is this faster: */ glm::mat4 newViewModelMatrix = (*existingViewMatrix) * (*existingModelMatrix); /* Or is this faster? */ glm::mat4 existingViewModelMatrix; /* declared in class header - initial value assigned in class constructor */ existingViewModelMatrix = (*existingViewMatrix) * (*existingModelMatrix);
I'm working on a code that needs to loop a switch case back to the beginning after a certain input is entered.
ex) Code:
printf("Select an option); printf("1. Play game"); printf("2. Status"); printf("3. Exit"); scanf("%i", &userinput); switch(userinput);
[Code]...
For my program, I want option 2 to display something, then loop back to "select and option" after the user presses enter. How would I write that? Would i use a while? do while?
Write a program to make a table for any input number and then continuesly ask to press y to print more table and if you press any key other than y then program must be terminate using while loop and do while loop. How to start or end with it.
I'm quite new to openMP, mostly used pthreads and mpi before. Now I like to tinker a bit with openMP, but haven't found any good docs, reference list or similar.
What's the equivalent to pthread's mutex lock in openMP?
Code: #pragma omp parallel for for(i=0; i<n ; i++){ // Do something intelligent... // If needed handle a shared variable. }
I'm trying to write a small brute force application in C on Ubuntu 14.04.1 using Code::Blocks with gcc-4.8.2. It's nothing special and just for practice.The focus is on a parallel procedure that generates strings by use of OpenMP. Every time a string is generated, the counter variable should be incremented. At the end, regardless of whether the search string was matched or not, it outputs the correct number of all generated strings (counts).It works fine so far.Here is my source code example:
Code:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <omp.h> /* Global variables */ const char Literals[] = "abcdefghijklmnopqrstuvwxyz"; const int NLiterals = sizeof( Literals ) - 1; // NLiterals = 26 Bytes. const char SearchString[] = "test"; // I.e. until 'test' there are 355414 counts. char MatchString[16]; }
[code]...
This should speed up the process of generating strings. But if I do so, always when the program has a match the number of counted strings is wrong. Here are some possible "wrong" outputs: Code: Match: 'test'! 40710 tries. <-- number of tries (counts) is wrong! or Code: Match: 'test'! 40375 tries. <-- number of tries (counts) is wrong! But if the program doesn't have a match (i.e. when I change SearchString to something like the following line), then the number of counts is correct: Code: const char SearchString[] = "test0"; The only thing I have to do before, is to change the follow line from:
Code:
printf( " No match! %u tries. ", Count / 8 ); to Code: printf( " No match! %u tries. ", Count );
But also it can happen that there is no output. Like an infinite or endless loop. How can I improve the source code in order that the correct number of counts is always displayed and what can be the reason for the endless loops time after time? Both issues appears only by the use of Code: #pragma omp for schedule( dynamic ).
I'm trying to implement Parallel loop with OpenMP. I just googled and got the below sample, but it seems its not executing parallely. It takes same amount time for code which is with parallel and without parallel.
Without Parallel : It takes 39 secs. ----------------- for (int I=0;I<100000;I++){ cout<<I<<" "; }
With Parallel : It takes 39 secs. --------------
#include<omp.h> #pragma omp parallel { #pragma omp for for (int I=0;I<100000;I++) { cout<<I<<endl; } }
Why parallel is not working and it takes same time. My machine is Dual Core.
I have to make a function that i'll later be able to use for a ceasar cypher. The letters should shift a user inputted number. This is what I have so far:
char shiftChar(char c, int s) { char ch = c; int shift = s; int newC; newC = int(ch) + shift; return newC; }
The problem with this, is that it doesn't loop back to the start of the alphabet once i get past z.
However, since it is multithreaded, I would like (and need!) to have one dedicated vector per thread. I haven't been able to find an example of how to do this online. Is it even possible?
I am trying to parallelize some of my code with OpenMP. When I switch to using multiple threads I start getting random numbers that are out of the expected range.
Here is a small example:
Code: #include <stdio.h> #include </usr/local/include/gsl/gsl_rng.h> #include </usr/local/include/gsl/gsl_randist.h> int main() { int mySeed=0; const gsl_rng_type *T; T = gsl_rng_ranlxs2; gsl_rng *r_1 ;
[Code] .....
gsl_rng_uniform should only output number in the range [0,1) but with multiple threads it outputs larger number as well.
We are making a program--but every time we input a value for scanf, the following for loop does not work and the program quits without displaying the for loop's function. We are not getting any errors.