Search Results

Search found 32290 results on 1292 pages for 'array key'.

Page 82/1292 | < Previous Page | 78 79 80 81 82 83 84 85 86 87 88 89  | Next Page >

  • Parallelism in .NET – Part 11, Divide and Conquer via Parallel.Invoke

    - by Reed
    Many algorithms are easily written to work via recursion.  For example, most data-oriented tasks where a tree of data must be processed are much more easily handled by starting at the root, and recursively “walking” the tree.  Some algorithms work this way on flat data structures, such as arrays, as well.  This is a form of divide and conquer: an algorithm design which is based around breaking up a set of work recursively, “dividing” the total work in each recursive step, and “conquering” the work when the remaining work is small enough to be solved easily. Recursive algorithms, especially ones based on a form of divide and conquer, are often a very good candidate for parallelization. This is apparent from a common sense standpoint.  Since we’re dividing up the total work in the algorithm, we have an obvious, built-in partitioning scheme.  Once partitioned, the data can be worked upon independently, so there is good, clean isolation of data. Implementing this type of algorithm is fairly simple.  The Parallel class in .NET 4 includes a method suited for this type of operation: Parallel.Invoke.  This method works by taking any number of delegates defined as an Action, and operating them all in parallel.  The method returns when every delegate has completed: Parallel.Invoke( () => { Console.WriteLine("Action 1 executing in thread {0}", Thread.CurrentThread.ManagedThreadId); }, () => { Console.WriteLine("Action 2 executing in thread {0}", Thread.CurrentThread.ManagedThreadId); }, () => { Console.WriteLine("Action 3 executing in thread {0}", Thread.CurrentThread.ManagedThreadId); } ); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Running this simple example demonstrates the ease of using this method.  For example, on my system, I get three separate thread IDs when running the above code.  By allowing any number of delegates to be executed directly, concurrently, the Parallel.Invoke method provides us an easy way to parallelize any algorithm based on divide and conquer.  We can divide our work in each step, and execute each task in parallel, recursively. For example, suppose we wanted to implement our own quicksort routine.  The quicksort algorithm can be designed based on divide and conquer.  In each iteration, we pick a pivot point, and use that to partition the total array.  We swap the elements around the pivot, then recursively sort the lists on each side of the pivot.  For example, let’s look at this simple, sequential implementation of quicksort: public static void QuickSort<T>(T[] array) where T : IComparable<T> { QuickSortInternal(array, 0, array.Length - 1); } private static void QuickSortInternal<T>(T[] array, int left, int right) where T : IComparable<T> { if (left >= right) { return; } SwapElements(array, left, (left + right) / 2); int last = left; for (int current = left + 1; current <= right; ++current) { if (array[current].CompareTo(array[left]) < 0) { ++last; SwapElements(array, last, current); } } SwapElements(array, left, last); QuickSortInternal(array, left, last - 1); QuickSortInternal(array, last + 1, right); } static void SwapElements<T>(T[] array, int i, int j) { T temp = array[i]; array[i] = array[j]; array[j] = temp; } Here, we implement the quicksort algorithm in a very common, divide and conquer approach.  Running this against the built-in Array.Sort routine shows that we get the exact same answers (although the framework’s sort routine is slightly faster).  On my system, for example, I can use framework’s sort to sort ten million random doubles in about 7.3s, and this implementation takes about 9.3s on average. Looking at this routine, though, there is a clear opportunity to parallelize.  At the end of QuickSortInternal, we recursively call into QuickSortInternal with each partition of the array after the pivot is chosen.  This can be rewritten to use Parallel.Invoke by simply changing it to: // Code above is unchanged... SwapElements(array, left, last); Parallel.Invoke( () => QuickSortInternal(array, left, last - 1), () => QuickSortInternal(array, last + 1, right) ); } This routine will now run in parallel.  When executing, we now see the CPU usage across all cores spike while it executes.  However, there is a significant problem here – by parallelizing this routine, we took it from an execution time of 9.3s to an execution time of approximately 14 seconds!  We’re using more resources as seen in the CPU usage, but the overall result is a dramatic slowdown in overall processing time. This occurs because parallelization adds overhead.  Each time we split this array, we spawn two new tasks to parallelize this algorithm!  This is far, far too many tasks for our cores to operate upon at a single time.  In effect, we’re “over-parallelizing” this routine.  This is a common problem when working with divide and conquer algorithms, and leads to an important observation: When parallelizing a recursive routine, take special care not to add more tasks than necessary to fully utilize your system. This can be done with a few different approaches, in this case.  Typically, the way to handle this is to stop parallelizing the routine at a certain point, and revert back to the serial approach.  Since the first few recursions will all still be parallelized, our “deeper” recursive tasks will be running in parallel, and can take full advantage of the machine.  This also dramatically reduces the overhead added by parallelizing, since we’re only adding overhead for the first few recursive calls.  There are two basic approaches we can take here.  The first approach would be to look at the total work size, and if it’s smaller than a specific threshold, revert to our serial implementation.  In this case, we could just check right-left, and if it’s under a threshold, call the methods directly instead of using Parallel.Invoke. The second approach is to track how “deep” in the “tree” we are currently at, and if we are below some number of levels, stop parallelizing.  This approach is a more general-purpose approach, since it works on routines which parse trees as well as routines working off of a single array, but may not work as well if a poor partitioning strategy is chosen or the tree is not balanced evenly. This can be written very easily.  If we pass a maxDepth parameter into our internal routine, we can restrict the amount of times we parallelize by changing the recursive call to: // Code above is unchanged... SwapElements(array, left, last); if (maxDepth < 1) { QuickSortInternal(array, left, last - 1, maxDepth); QuickSortInternal(array, last + 1, right, maxDepth); } else { --maxDepth; Parallel.Invoke( () => QuickSortInternal(array, left, last - 1, maxDepth), () => QuickSortInternal(array, last + 1, right, maxDepth)); } We no longer allow this to parallelize indefinitely – only to a specific depth, at which time we revert to a serial implementation.  By starting the routine with a maxDepth equal to Environment.ProcessorCount, we can restrict the total amount of parallel operations significantly, but still provide adequate work for each processing core. With this final change, my timings are much better.  On average, I get the following timings: Framework via Array.Sort: 7.3 seconds Serial Quicksort Implementation: 9.3 seconds Naive Parallel Implementation: 14 seconds Parallel Implementation Restricting Depth: 4.7 seconds Finally, we are now faster than the framework’s Array.Sort implementation.

    Read the article

  • Why the Enter key in a Mac keyboard is mapped to Level?

    - by Anentropic
    Just installing Ubuntu for the first time, glad to ditch Win 7. I have a KVM switch and also a Mac, hence I'm using a Mac keyboard (the full size alu one) Everything's pretty cool. First thing I wondered is why the numeric keypad doesn't work? Oh, I have to find the num lock key (which should default to on, sensibly, no?) which isn't labelled as such on a Mac keyboard. Ok no problem. Then for some reason the Enter key on the keypad doesn't work still. Check the keyboard layout (set to 'English UK Macintosh')... inspecting the layout the Enter key is mapped to something called 'Level' - WTF is 'Level'? Everything else about the keyboard works great ie the £ $ # @ " are all perfect, volume control works as expected... why this weird key mapping on the Enter key? More importantly... how do I change it to work as an Enter key ?

    Read the article

  • The input doesn't recognize that I release the key?

    - by joapet99
    I'm creating a window (JOptionPane), in response to a collision. However, if the player is holding a key down when the window pops up, the input doesn't trigger a key release when the key is released. I don't think you can just check it with a isRelease function in the input, since the input is kind of corrupt. Can you help me? The way I check if the key is down: if(input.isKeyDown(Input.KEY_A)&& TestLevel.isFighting == false){ if(owner.canMoveLeft){ position.x -= speed * delta; } } I am not handling the key release by myself, but if I check if the key is down it should work. But it doesn't.

    Read the article

  • SSL, Nginx, X509_check_private_key:key values mismatch error

    - by Dmitry T
    I have nginx server with the SSL. I'm trying to submit ssl sertificate. After I restart nginx I'm getting error: SSL_CTX_use_PrivateKey_file(".../example.com.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch) I found some solution here: http://nginx.org/en/docs/http/configuring_https_servers.html#chains but i'm not using of any bundles, Any ideas on what is the issue ? Thank you in advance, Dmitry

    Read the article

  • how to make a multiboot usb key ?

    - by zillion
    I wanna cut my 8 gb usb key into several partitions to use wintoflash for a windows xp (maybe nlited before) and I wanna put also the Framakey ubuntu-fr remix pack into it has the second bootable OS and tweak and mod it a little cause if I can I wanna switch ubuntu 9.04 included to the LTS version ... So someone know how to do it easily ??? IMP : in short I wanna make a dual-boot usb key with windows xp sp3 and ubuntu 8.04.3 LTS ...

    Read the article

  • Tunnelblick cannot load private key file

    - by Patrick
    I got a certificate from my network administrator and the passphrase for it. Put everything in the Tunnelblick configuration folder, but always get an error: 2010-11-20 13:22:10 Cannot load private key file vpn-pass.key: error:06065064:digital envelope routines:EVP_DecryptFinal:bad decrypt: error:0906A065:PEM routines:PEM_do_header:bad decrypt: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib Everything was copy&paste and it works on a windows machine. How can I get this to work?

    Read the article

  • Foreign key problem linking tables in phpMyAdmin

    - by alan
    I'm using phpMyAdmin (PHP & MySQL) and I'm having a lot of trouble linking the tables using foreign keys. I'm getting negative values for the field countyId (which is the foriegn key). However, it is linking to my other table and cascading fine. When I go to add data there will be a drop selection for the CountyId and the values will look something like this: " -1 1- " Here is my alter statement: ALTER TABLE Baronies ADD FOREIGN KEY (CountyId) REFERENCES Counties (CountyId) ON DELETE CASCADE

    Read the article

  • Foreign key problem linking tables in phpMyAdmin

    - by alan
    I'm using phpMyAdmin (PHP & MySQL) and I'm having a lot of trouble linking the tables using foreign keys. I'm getting negative values for the field countyId (which is the foriegn key). However, it is linking to my other table and cascading fine. When I go to add data there will be a drop selection for the CountyId and the values will look something like this: " -1 1- " Here is my alter statement: ALTER TABLE Baronies ADD FOREIGN KEY (CountyId) REFERENCES Counties (CountyId) ON DELETE CASCADE

    Read the article

  • VMware Workstation Easy Install is unable to install Windows 8 with a product key specified

    - by Hippo
    I recently attempted to install Windows 8 Enterprise Edition in VMware Workstation. It specified that Easy Install would be used, and requested for the product key, for which I entered the generated MSDN key. This didn't work - the installation goes into a loop with each iteration of the loop ending with the following screen: The guest reboots and the process repeats after clicking "OK". Has anyone been able to successfully install their MSDN image with Easy Install in Workstation?

    Read the article

  • Change the on-screen keyboard key size?

    - by stukelly
    Is it possible to change the key size on the on-screen keyboard included with Windows XP? I find it really difficult to use on a touch screen, when there is no keyboard available. I know you can the change the font size, but this does not change the key size.

    Read the article

  • Remap FN to another key

    - by MrValdez
    I got a keyboard (Logitech Wave, pictured below) which I'm very happy with. Unfortunately, the manufacturer has changed the button for right-click for a FN key. Is there any program to remap the FN key to something else?

    Read the article

  • Validating GPG key signature authenticity

    - by Dor
    I'm trying to validate the integrity of my httpd-2.2.17.tar.gz image. I followed the steps written in the following pages: http://httpd.apache.org/download.cgi#verify http://httpd.apache.org/dev/verification.html#Validating But I got: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. What I need to do in order to verify the authenticity of the key?

    Read the article

  • Remove key from known_hosts

    - by Adam Matan
    Hi, I have built several virtual machines during the last few weeks. The problem is, the .ssh/known_hosts gives me the Man in the middle warning. This happens because another fingerprint is associated with the virtual machine IP. In the .ssh/known_hosts file, however, I don't seem to find the record related to the IP, only two bizarre, key-like strings and "ssh-rsa". Any ideas how to remove the old key from known_hosts? Thanks, Udi

    Read the article

  • What is the registry key for 'Enhanced Pointer Precision' option in the Mouse Properties

    - by detj
    I use a Razer mouse at work, and though the mouse is supercool, it's driver always removes the 'Enhanced Pointer Precision' option from the Pointer Options tab found in the Mouse Properties of Control Panel on startup. If I could find the correct registry setting to set this option 'on' whenever Windows starts, it would solve my problem. I've tried finding the correct key using Process Monitor, I didn't get success. Anyone know the key??

    Read the article

  • Phpmyadmin mysql foreign key problem

    - by alan
    Hey guys i'm using phpmyadmin (php & mysql) and i'm having alot of trouble linking the tables using foreign keys. I'm getting negative values for the field countyId (which is the foriegn key). However it is linking to my other table fine and it's cascading fine. So when I go to add data there will be a drop box for the CountyId and the values will look something like this, " -1 1- " Here is my alter statement, ALTER TABLE Baronies ADD FOREIGN KEY (CountyId) REFERENCES Counties (CountyId) ON DELETE CASCADE

    Read the article

  • windows xp - shift key pops up a menu

    - by shachar
    Helo all! A wierd shift-key problem, for which all I found was sticky keys answers First of all, I have all the sticky keys and related, Disabled. Every windows that is currently in focus, if I press the left shift-key alone, pops up the current window menu. I have no idea how and why this has happened, or how to disable it. I could not find any reference in google about it (perhaps my search-string was not good..) any help would be appriciated

    Read the article

  • Xorg: How can I map AltGr to the CapsLock Key (to toggle 3rd level symbols)

    - by basweber
    Hi, as many others I don't need Capslock. I want to reassign it to have the function of AltGr. I use Kubuntu 9.10 but I think there must be a solution which is distribution independent. I already tried to use setxkbmap or xmodmap. Using xmodmap at least I managed that the CapsLock key to behaves like the Delete key by following this description. But I could not achieve assigning the AltGr behavior to CapsLock.

    Read the article

  • Disable default Gnome Shell Super Key Mapping

    - by soares
    Gnome Shell by default uses the Super (Windows) key to display the activities overview. But I'd prefer to use the Super key to invoke Synapse. Right now I have to press Super+Super+Spacebar in order to invoke Synapse which is annoying (Super+Spacebar is the binding to invoke Synapse). Is there any way to remove the default Gnome Shell mapping? In the keyboard shortcuts system settings, only the Alt+F1 binding appears for the activities overview action.

    Read the article

  • Disable all 'Ctrl' key shortcuts in AutoHotkey?

    - by pelms
    I'm trying to lock down a kiosk PC and need to disable various 'Ctrl + key' keyboard shortcuts. I started by disabling them individually using AutoHotkey... ^F4::return ^w::return ^+w::return ^Esc::return ^+Esc::return ;etc... but keep discovering new ones shortcuts (did you know that 'Ctrl + Q' in IE8 displays a tab thumbnail page). So I tried to disable the Ctrl key completely using stuff like: LCtrl::return RCtrl::return ~Ctrl::return ^::return with no luck. Any ideas?

    Read the article

  • SSH: Configure ssh_config to use specific key file for a specific server fingerprint

    - by Penthi
    I have a key based login for a server. The IP and DNS of the server can change, because it is hosted on Amazon. Is there a way to configure the ssh client config to use the specific key file for this server only, when the fingerprint of the server matches? In other words: Normaly servers are matched by IP or DNS in the ssh client config. I want to do this by fingerprint, becaus IP and DNS can change.

    Read the article

  • vista issue with shift key

    - by Mr New
    for some reason when i press the shift key on my laptop keyboard is mapped to 'ctrl+v' which does a paste. i thought it was the keyboard but then i replaced it with a wireless one,it still gives me the same issue. can someone help me. i cant just turn off the shift key all together because i do need it at times. model 8510w; vista operating system

    Read the article

< Previous Page | 78 79 80 81 82 83 84 85 86 87 88 89  | Next Page >