Search Results

Search found 31421 results on 1257 pages for 'software performance'.

Page 229/1257 | < Previous Page | 225 226 227 228 229 230 231 232 233 234 235 236  | Next Page >

  • What is the fastest cyclic synchronization in Java (ExecutorService vs. CyclicBarrier vs. X)?

    - by Alex Dunlop
    Which Java synchronization construct is likely to provide the best performance for a concurrent, iterative processing scenario with a fixed number of threads like the one outlined below? After experimenting on my own for a while (using ExecutorService and CyclicBarrier) and being somewhat surprised by the results, I would be grateful for some expert advice and maybe some new ideas. Existing questions here do not seem to focus primarily on performance, hence this new one. Thanks in advance! The core of the app is a simple iterative data processing algorithm, parallelized to the spread the computational load across 8 cores on a Mac Pro, running OS X 10.6 and Java 1.6.0_07. The data to be processed is split into 8 blocks and each block is fed to a Runnable to be executed by one of a fixed number of threads. Parallelizing the algorithm was fairly straightforward, and it functionally works as desired, but its performance is not yet what I think it could be. The app seems to spend a lot of time in system calls synchronizing, so after some profiling I wonder whether I selected the most appropriate synchronization mechanism(s). A key requirement of the algorithm is that it needs to proceed in stages, so the threads need to sync up at the end of each stage. The main thread prepares the work (very low overhead), passes it to the threads, lets them work on it, then proceeds when all threads are done, rearranges the work (again very low overhead) and repeats the cycle. The machine is dedicated to this task, Garbage Collection is minimized by using per-thread pools of pre-allocated items, and the number of threads can be fixed (no incoming requests or the like, just one thread per CPU core). V1 - ExecutorService My first implementation used an ExecutorService with 8 worker threads. The program creates 8 tasks holding the work and then lets them work on it, roughly like this: // create one thread per CPU executorService = Executors.newFixedThreadPool( 8 ); ... // now process data in cycles while( ...) { // package data into 8 work items ... // create one Callable task per work item ... // submit the Callables to the worker threads executorService.invokeAll( taskList ); } This works well functionally (it does what it should), and for very large work items indeed all 8 CPUs become highly loaded, as much as the processing algorithm would be expected to allow (some work items will finish faster than others, then idle). However, as the work items become smaller (and this is not really under the program's control), the user CPU load shrinks dramatically: blocksize | system | user | cycles/sec 256k 1.8% 85% 1.30 64k 2.5% 77% 5.6 16k 4% 64% 22.5 4096 8% 56% 86 1024 13% 38% 227 256 17% 19% 420 64 19% 17% 948 16 19% 13% 1626 Legend: - block size = size of the work item (= computational steps) - system = system load, as shown in OS X Activity Monitor (red bar) - user = user load, as shown in OS X Activity Monitor (green bar) - cycles/sec = iterations through the main while loop, more is better The primary area of concern here is the high percentage of time spent in the system, which appears to be driven by thread synchronization calls. As expected, for smaller work items, ExecutorService.invokeAll() will require relatively more effort to sync up the threads versus the amount of work being performed in each thread. But since ExecutorService is more generic than it would need to be for this use case (it can queue tasks for threads if there are more tasks than cores), I though maybe there would be a leaner synchronization construct. V2 - CyclicBarrier The next implementation used a CyclicBarrier to sync up the threads before receiving work and after completing it, roughly as follows: main() { // create the barrier barrier = new CyclicBarrier( 8 + 1 ); // create Runable for thread, tell it about the barrier Runnable task = new WorkerThreadRunnable( barrier ); // start the threads for( int i = 0; i < 8; i++ ) { // create one thread per core new Thread( task ).start(); } while( ... ) { // tell threads about the work ... // N threads + this will call await(), then system proceeds barrier.await(); // ... now worker threads work on the work... // wait for worker threads to finish barrier.await(); } } class WorkerThreadRunnable implements Runnable { CyclicBarrier barrier; WorkerThreadRunnable( CyclicBarrier barrier ) { this.barrier = barrier; } public void run() { while( true ) { // wait for work barrier.await(); // do the work ... // wait for everyone else to finish barrier.await(); } } } Again, this works well functionally (it does what it should), and for very large work items indeed all 8 CPUs become highly loaded, as before. However, as the work items become smaller, the load still shrinks dramatically: blocksize | system | user | cycles/sec 256k 1.9% 85% 1.30 64k 2.7% 78% 6.1 16k 5.5% 52% 25 4096 9% 29% 64 1024 11% 15% 117 256 12% 8% 169 64 12% 6.5% 285 16 12% 6% 377 For large work items, synchronization is negligible and the performance is identical to V1. But unexpectedly, the results of the (highly specialized) CyclicBarrier seem MUCH WORSE than those for the (generic) ExecutorService: throughput (cycles/sec) is only about 1/4th of V1. A preliminary conclusion would be that even though this seems to be the advertised ideal use case for CyclicBarrier, it performs much worse than the generic ExecutorService. V3 - Wait/Notify + CyclicBarrier It seemed worth a try to replace the first cyclic barrier await() with a simple wait/notify mechanism: main() { // create the barrier // create Runable for thread, tell it about the barrier // start the threads while( ... ) { // tell threads about the work // for each: workerThreadRunnable.setWorkItem( ... ); // ... now worker threads work on the work... // wait for worker threads to finish barrier.await(); } } class WorkerThreadRunnable implements Runnable { CyclicBarrier barrier; @NotNull volatile private Callable<Integer> workItem; WorkerThreadRunnable( CyclicBarrier barrier ) { this.barrier = barrier; this.workItem = NO_WORK; } final protected void setWorkItem( @NotNull final Callable<Integer> callable ) { synchronized( this ) { workItem = callable; notify(); } } public void run() { while( true ) { // wait for work while( true ) { synchronized( this ) { if( workItem != NO_WORK ) break; try { wait(); } catch( InterruptedException e ) { e.printStackTrace(); } } } // do the work ... // wait for everyone else to finish barrier.await(); } } } Again, this works well functionally (it does what it should). blocksize | system | user | cycles/sec 256k 1.9% 85% 1.30 64k 2.4% 80% 6.3 16k 4.6% 60% 30.1 4096 8.6% 41% 98.5 1024 12% 23% 202 256 14% 11.6% 299 64 14% 10.0% 518 16 14.8% 8.7% 679 The throughput for small work items is still much worse than that of the ExecutorService, but about 2x that of the CyclicBarrier. Eliminating one CyclicBarrier eliminates half of the gap. V4 - Busy wait instead of wait/notify Since this app is the primary one running on the system and the cores idle anyway if they're not busy with a work item, why not try a busy wait for work items in each thread, even if that spins the CPU needlessly. The worker thread code changes as follows: class WorkerThreadRunnable implements Runnable { // as before final protected void setWorkItem( @NotNull final Callable<Integer> callable ) { workItem = callable; } public void run() { while( true ) { // busy-wait for work while( true ) { if( workItem != NO_WORK ) break; } // do the work ... // wait for everyone else to finish barrier.await(); } } } Also works well functionally (it does what it should). blocksize | system | user | cycles/sec 256k 1.9% 85% 1.30 64k 2.2% 81% 6.3 16k 4.2% 62% 33 4096 7.5% 40% 107 1024 10.4% 23% 210 256 12.0% 12.0% 310 64 11.9% 10.2% 550 16 12.2% 8.6% 741 For small work items, this increases throughput by a further 10% over the CyclicBarrier + wait/notify variant, which is not insignificant. But it is still much lower-throughput than V1 with the ExecutorService. V5 - ? So what is the best synchronization mechanism for such a (presumably not uncommon) problem? I am weary of writing my own sync mechanism to completely replace ExecutorService (assuming that it is too generic and there has to be something that can still be taken out to make it more efficient). It is not my area of expertise and I'm concerned that I'd spend a lot of time debugging it (since I'm not even sure my wait/notify and busy wait variants are correct) for uncertain gain. Any advice would be greatly appreciated.

    Read the article

  • Software versioning standards

    - by Yurish
    Are there any software versioning standards? Or i can change version of my product, when i have made some changes to it? Is there any percentage in changes, by which i can say, what version this product will have?

    Read the article

  • Software evaluation - licence

    - by sijith
    Hi, Can any one help me on software licence module. We created a new application and want to release a demo version(30 days trial) of our tool later we need full version. How can i generate license file or license code and how to limit 30 days evaluation. Please give me some help on this. Our application is developed on windows in QT

    Read the article

  • Looking for a Software Engineer with JMS od DDS [closed]

    - by Bobby Sethi
    I've not been on here before but just stubmled accross the website so I hope I am ok using for this purpose? I am a contract recruiter and I supply to a major defence contractor.. we are currently looking for a C/C# Software Developer with experience of JMS (or even better DDS) experience. Can anyone help? Bobby Sethi 07885 824 766

    Read the article

  • Can someone clarify what this Joel On Software quote means: (functional programs have no side effect

    - by Bob
    I was reading Joel On Software today and ran across this quote: Without understanding functional programming, you can't invent MapReduce, the algorithm that makes Google so massively scalable. The terms Map and Reduce come from Lisp and functional programming. MapReduce is, in retrospect, obvious to anyone who remembers from their 6.001-equivalent programming class that purely functional programs have no side effects and are thus trivially parallelizable. What does he mean when he says functional programs have no side effects? And how does this make parallelizing trivial?

    Read the article

  • INFORMATION ON BO VOYAGER AND SOFTWARE

    - by praveen
    Hi All, I would like to know information on BO VOYAGER and its text books and how to get software for practice. We have developed OLAP cubes using SSAS 2008 and we are concern to look for VOYAGER. any opinions on the VOYAGER and how to start learning VOYAGER. I would like to know the complete information. thanks all prav

    Read the article

  • Integrate website backend with forum software?

    - by Msencenb
    I am designing a php/mysql website that will have a members are and a separate "forum" section. Should I just use the forum software as my "login/registration"? If this is the case should I go with VBulletin, Invision, phpBB3 or something different? Or should I roll my own single sign on hack? Or something completely different?

    Read the article

  • Best free flowchart software?

    - by Click Upvote
    I need to map out a complex algorithm with lots of conditional options. Need an easy to use flowchart software, preferably free since I need it for just a one time use. Would prefer something lightweight which doesn't eat up all the CPU memory. Any ideas?

    Read the article

  • Software patents in US/Europe? [closed]

    - by WeNeedAnswers
    I don't quite understand how the patent system works in the US and in much respect to Europe. I have heard that a pattern of operation can be patented. what are the implications, has anyone been taken to court yet over a software patent based on pattern of usage. I have seen the cases with nokia, palm and Apple. If I write something based on these patterns of operation, will I need a licence?

    Read the article

  • WPF Application Slow Unresponsive when demonstrating using remote sharing software

    - by Kev
    After spending 14 hours on this I think its time to share my woes and see if anyone has experienced this issue before. Ill describe the issue and tests I have done to rule out certain things. Ok so I have a WPF application which loads in data from an SQL database. I am using DevExpress Components for datagrids, ribbons etc.. and FluentNhibernate to provide a session for database operations. I am also using log4net to log events to a textfile. Using the application on my laptop with SQL Express 2008 works fine.. the application starts up, retrieves 1000 records and I can tab through the controls on the ribbon. Now, I decided to demo the application to a third party and used remote login/sharing software online to share my desktop with the other person so as I could load the application on my laptop and they could view me using the application. Now, the application takes approx 45 seconds to load... 30 seconds with a blank database where as, when im not sharing out my screen using the online software the application loads in about 7-10 seconds. As well as that, even using the controls in the application during the demo were very sticky, slow and unresponsive. During the sharing session though however I was able to use other applications without any problems.. everything else worked fine. But I cannot understand how my application works ok under normal conditions , even browsing the net at the same time etc... BUT totally fails to perform correctly when I am sharing a session with another user... the CPU usage shot up to 100% too at times when the application was trying to start up... Please see below a list of 3rd party dlls I am using as references in my project. DevExpress dlls FluidKit PixelLab.WPF PixelLab.Common Galasoft WPF Kit FluentNHibernate NHibernate Nhibernate.ByteCode.Castle Skype4ComLib TXTEXTControl log4net LinqKit All of these DLLs are in the output folder with the application dlls created from the class assemblys in the project. So when installed via an installer on a machine the dlls will be in the same application folder as the application file itself. Many thanks

    Read the article

  • Datamodel diagram-software

    - by megala
    I have nearly 20 tables.I want to draw datamodel diagram for this table.But it take more time.Is it possible to draw the diagram using any datamodel software.My constraint is i give dataonly it draw the diagram automatically,please suggest any softwsre related to my constraints

    Read the article

  • What software has been written in Scheme?

    - by skiphoppy
    I loved Scheme in the programming languages concepts class I took several years ago. Ever since reading what Paul Graham has to say about Lisp, I've been intending to go back and pick Scheme up again and see if it'll improve my programming in general. Are there any well-known works of software written in Scheme? Open source packages? Websites?

    Read the article

  • Where can one find free software icons / images?

    - by mmattax
    This may not be directly related to programming, but I always find it hard to get quality icons that can be used for software. I currently have the need for some type of "green checkmark image", and I always seem to be looking for print, save, delete types of icons... Anybody have good resources? Note: I rather not be stealing someone's intellectual property.

    Read the article

  • Are there public domain collections of translations for strings commonly used in software applicatio

    - by Malcolm
    It seems to me that there must be some public domain collection of gettext compatible PO files that we could search for 1:1 or fuzzy translations for strings commonly used in software applications? Is there a technical and copyright friendly way to query services like Google's Translator Toolkit, LaunchPad, Mygengo, etc. to find translations for common strings? Thank you, Malcolm

    Read the article

  • .NET Automated Build Server Software

    - by KevinDeus
    What good .NET Continous Integration and Automated Build and Deployment Software is out there? We have been using CruiseControl.NET but it is really starting to get on our nerves with the amount of maintenance it needs. We're looking for something that virtually anybody can manage, and it would also really be good to not have to write a NAnt build script. We use Subversion for Source Controll

    Read the article

  • software program to help manage company [closed]

    - by chrissy
    Is there a software program for a company who publishes a newsletter with advertisers in it. One that keeps track of sales of advertisers, payments to salesforce, layouts/copy for the publication, accounting. Is there one program that takes care of all of that or are their seprate programs for each?

    Read the article

  • Software marketplace

    - by Hemant
    I have currently working on a desktop application which I intend to make available for purchase. Are there any free or cost effective services/websites which I can use to sell my software and collect payment?

    Read the article

< Previous Page | 225 226 227 228 229 230 231 232 233 234 235 236  | Next Page >