Best PAPI Calculator Online: Quick & Easy


Best PAPI Calculator Online: Quick & Easy

This device facilitates efficiency evaluation by offering a simplified interface for calculating efficiency metrics utilizing Efficiency Utility Programming Interface (PAPI) occasions. For instance, it may be used to measure cache misses or floating-point operations inside a particular code part, permitting builders to pinpoint efficiency bottlenecks.

Streamlined efficiency analysis is essential for optimizing software program and {hardware}. By providing an accessible method to leverage PAPI, this sort of device allows builders to determine areas for enchancment, resulting in quicker execution speeds and decreased useful resource consumption. Traditionally, accessing and using low-level efficiency counters has been advanced. Such a device simplifies this course of, democratizing entry to highly effective efficiency evaluation strategies.

This exploration gives a basis for understanding extra superior efficiency evaluation subjects, together with the collection of acceptable efficiency counters, interpretation of outcomes, and optimization methods. Subsequent sections will delve into these areas, providing sensible steerage for maximizing software efficiency.

1. Efficiency Monitoring

Efficiency monitoring constitutes a important side of software program and {hardware} growth, offering insights into system habits below varied circumstances. A efficiency evaluation device constructed upon the Efficiency Utility Programming Interface (PAPI) performs a big position in facilitating efficient efficiency monitoring.

  • {Hardware} Counter Entry

    Direct entry to {hardware} efficiency counters is prime for correct and detailed efficiency evaluation. These counters, residing throughout the processor, monitor particular occasions comparable to cache misses, department mispredictions, and directions executed. A PAPI-based device gives a standardized mechanism for accessing these counters, enabling exact measurement of efficiency traits. For instance, monitoring cache misses can reveal reminiscence entry inefficiencies. This entry is important for understanding the underlying {hardware} habits impacting efficiency.

  • Occasion Choice and Aggregation

    Choosing related efficiency occasions is essential for focused evaluation. A PAPI-based device permits builders to decide on particular occasions or pre-defined occasion units related to their evaluation targets. Aggregating these occasions over time or inside particular code sections gives a complete view of efficiency bottlenecks. For example, combining cache miss counts with instruction counts permits for calculating the cache miss charge, a key indicator of reminiscence efficiency. This selectivity and aggregation functionality empowers centered efficiency evaluations.

  • Actual-time Monitoring and Profiling

    Actual-time monitoring gives insights into dynamic system habits, enabling commentary of efficiency fluctuations throughout execution. A PAPI-based device can present real-time suggestions on chosen efficiency occasions, permitting builders to determine transient efficiency points. Profiling particular capabilities or code sections isolates efficiency hotspots, guiding optimization efforts. This functionality is invaluable for understanding dynamic efficiency traits and figuring out areas for enchancment.

  • Information Evaluation and Visualization

    Collected efficiency information requires evaluation and visualization for efficient interpretation. A PAPI-based device typically integrates with information evaluation and visualization frameworks, permitting builders to create graphs, charts, and reviews that illustrate efficiency developments and determine bottlenecks. Visualizing cache miss charges over time, as an example, can reveal patterns indicative of reminiscence entry inefficiencies. This facilitates knowledgeable decision-making relating to optimization methods.

These sides of efficiency monitoring, facilitated by a PAPI-based device, present a complete framework for understanding and optimizing system efficiency. By leveraging {hardware} counter entry, occasion choice, real-time monitoring, and information evaluation capabilities, builders can determine and handle efficiency bottlenecks, in the end resulting in extra environment friendly software program and {hardware}.

2. {Hardware} Counters

{Hardware} counters are basic to the performance of a Efficiency Utility Programming Interface (PAPI) primarily based calculator. These specialised registers throughout the processor monitor low-level {hardware} occasions, offering essential information for efficiency evaluation. Understanding their position is important for leveraging the total potential of such efficiency evaluation instruments.

  • Sorts of {Hardware} Counters

    Fashionable processors supply a wide range of {hardware} counters, every designed to watch particular microarchitectural occasions. Examples embody counters for cache misses, department mispredictions, directions retired, and floating-point operations. A PAPI calculator gives entry to those numerous counters, enabling focused efficiency evaluation. The precise counters obtainable rely on the processor structure.

  • Occasion Mapping and Abstraction

    PAPI abstracts the complexities of accessing {hardware} counters by offering a constant interface throughout completely different processor architectures. It maps high-level efficiency occasions to the corresponding low-level {hardware} counters. This abstraction simplifies the method of amassing efficiency information, permitting builders to give attention to evaluation slightly than low-level {hardware} specifics. For example, requesting the PAPI_TOT_CYC occasion (complete cycles) routinely makes use of the suitable {hardware} counter on the goal platform.

  • Counter Overflow and Dealing with

    {Hardware} counters have a finite dimension and might overflow throughout prolonged intervals of monitoring. PAPI calculators implement mechanisms to deal with counter overflows, making certain information integrity. These mechanisms usually contain periodic sampling and accumulation of counter values, mitigating the danger of knowledge loss on account of overflow. Correct overflow dealing with is essential for dependable efficiency measurements, particularly throughout long-running purposes.

  • Efficiency Counter Teams and Multiplexing

    Some processors enable grouping {hardware} counters to watch a number of occasions concurrently. Nonetheless, if the variety of occasions exceeds the obtainable counters, multiplexing is important. PAPI calculators handle counter teams and multiplexing transparently, optimizing information assortment effectivity whereas minimizing efficiency overhead. Understanding these underlying mechanisms helps interpret outcomes and optimize the monitoring course of.

The efficient utilization of {hardware} counters is central to the performance and accuracy of a PAPI calculator. By offering entry to those low-level efficiency metrics, PAPI empowers builders to achieve deep insights into software habits and determine optimization alternatives. The power to pick particular counters, handle overflow, and deal with counter teams contributes considerably to the facility and suppleness of efficiency evaluation utilizing a PAPI-based device.

3. Software program Interface

The software program interface of a Efficiency Utility Programming Interface (PAPI) primarily based calculator is essential for its usability and effectiveness. It acts because the bridge between the consumer and the underlying {hardware} counters, offering a simplified and standardized method to entry efficiency information. A well-designed interface simplifies advanced duties, comparable to configuring occasions, beginning and stopping information assortment, and studying counter values. This abstraction shields customers from low-level {hardware} particulars, permitting them to give attention to efficiency evaluation slightly than intricate {hardware} configurations. For instance, a high-level operate name like PAPI_start_counters() initiates information assortment for specified occasions, dealing with the underlying {hardware} interactions transparently.

The software program interface additionally performs a key position in information presentation and manipulation. It gives capabilities for formatting uncooked counter values into human-readable metrics, comparable to cache miss charges or directions per cycle. Moreover, the interface typically contains options for aggregating information throughout a number of threads or processes, enabling system-wide efficiency evaluation. For example, the PAPI_read_counters() operate retrieves counter values, which the software program interface can then course of and current as significant efficiency metrics. The supply of such capabilities vastly simplifies the method of extracting insights from uncooked efficiency information.

A sturdy and user-friendly software program interface is important for maximizing the utility of a PAPI calculator. It simplifies entry to advanced {hardware} efficiency counters, facilitates information interpretation, and permits for classy evaluation strategies. The benefit of use offered by the interface encourages wider adoption of efficiency evaluation instruments, contributing to the event of extra environment friendly and performant software program. Challenges in interface design embody sustaining cross-platform compatibility and balancing ease of use with superior performance. Nonetheless, a well-designed software program interface successfully addresses these challenges, empowering customers to leverage the total potential of PAPI for efficiency optimization.

4. Metric Calculation

Metric calculation kinds the core operate of a Efficiency Utility Programming Interface (PAPI) primarily based calculator. Uncooked {hardware} counter values, whereas offering low-level insights, lack direct interpretability for efficiency optimization. A PAPI calculator bridges this hole by remodeling uncooked counter information into significant efficiency metrics. This transformation depends on established formulation and algorithms particular to every efficiency metric. For instance, calculating the cache miss charge entails dividing the variety of cache misses (obtained from a {hardware} counter) by the entire variety of reminiscence accesses. Equally, directions per cycle (IPC) is derived by dividing the variety of directions retired by the entire clock cycles. This calculation course of gives actionable efficiency indicators, enabling knowledgeable optimization methods.

The accuracy and reliability of metric calculation are paramount for efficient efficiency evaluation. Errors in calculation can result in misinterpretations of efficiency bottlenecks and misdirected optimization efforts. A PAPI calculator ensures correct calculations by adhering to established efficiency metric definitions and using strong algorithms. Moreover, the device manages potential points comparable to counter overflow, making certain the integrity of the calculated metrics. This precision is important for figuring out real efficiency limitations and quantifying the influence of optimization methods. For example, an precisely calculated cache miss charge gives a dependable indicator of reminiscence entry effectivity, guiding optimization efforts in direction of lowering cache misses and bettering reminiscence efficiency. Equally, exact IPC values allow correct comparisons between completely different code implementations or optimization strategies.

In conclusion, metric calculation will not be merely a function however the central objective of a PAPI calculator. It transforms uncooked {hardware} counter information into actionable insights, empowering builders to know and optimize software efficiency. The accuracy and reliability of those calculations are essential for efficient efficiency evaluation and optimization. Understanding the underlying calculation strategies and potential challenges contributes to the knowledgeable interpretation of efficiency information and the event of extra environment friendly software program.

5. Bottleneck Evaluation

Efficiency bottlenecks signify important limitations in software program or {hardware} methods, proscribing general efficiency. Figuring out and mitigating these bottlenecks is important for optimization. A efficiency evaluation device primarily based on the Efficiency Utility Programming Interface (PAPI), sometimes called a PAPI calculator, performs an important position in bottleneck evaluation by offering detailed efficiency information at a low degree.

  • Useful resource Competition

    Useful resource competition, comparable to competitors for reminiscence bandwidth, cache entry, or I/O operations, can severely impede efficiency. A PAPI calculator allows measurement of particular {hardware} occasions associated to useful resource utilization, revealing competition factors. For example, excessive cache miss charges, detectable by PAPI counters, could point out reminiscence bandwidth bottlenecks. Understanding useful resource competition is step one towards focused optimization.

  • Instruction Stalls

    Instruction stalls, brought on by dependencies or useful resource unavailability, disrupt the sleek stream of instruction execution. A PAPI calculator can monitor occasions associated to pipeline stalls and department mispredictions, offering insights into the causes of those delays. For instance, frequent department mispredictions, quantifiable utilizing PAPI, can result in important efficiency degradation. Figuring out these stalls permits builders to restructure code or make use of prefetching strategies to mitigate their influence.

  • Inefficient Algorithms

    Algorithmic inefficiencies can result in extreme computations or reminiscence accesses, consuming beneficial sources and hindering efficiency. Whereas a PAPI calculator doesn’t instantly analyze algorithms, it gives information that may spotlight their influence. For example, if a particular code part reveals excessive instruction counts and reminiscence accesses regardless of low useful resource competition, it might point out an inefficient algorithm. This data guides builders in direction of algorithmic optimization.

  • Synchronization Overhead

    In multi-threaded purposes, synchronization mechanisms, whereas vital for information integrity, can introduce overhead. A PAPI calculator can measure occasions associated to lock competition and synchronization operations, quantifying their influence on efficiency. Excessive lock competition, revealed by PAPI counters, signifies extreme synchronization overhead. This information informs methods for optimizing synchronization mechanisms, comparable to lowering lock granularity or utilizing various synchronization primitives.

By offering exact measurements of {hardware} occasions associated to those widespread bottleneck varieties, a PAPI calculator empowers builders to pinpoint efficiency limitations precisely. This focused evaluation facilitates efficient optimization methods, resulting in improved software program and {hardware} efficiency. The power to determine and handle particular bottlenecks is essential for reaching optimum system effectivity.

6. Code Optimization

Code optimization is the method of modifying software program to enhance its efficiency and effectivity. A Efficiency Utility Programming Interface (PAPI) primarily based calculator, by offering detailed efficiency metrics, performs a vital position in guiding and evaluating code optimization efforts. It permits builders to determine efficiency bottlenecks and measure the influence of optimization methods, enabling data-driven selections.

  • Focused Optimization

    PAPI calculators present granular efficiency information, enabling focused optimization efforts. By pinpointing particular code sections with excessive cache miss charges, department mispredictions, or extreme instruction counts, builders can focus optimization efforts the place they’ve probably the most important influence. For example, a PAPI calculator may reveal {that a} particular loop reveals a excessive cache miss charge. This perception guides the developer to optimize the loop’s reminiscence entry patterns, minimizing cache misses and bettering efficiency. With out such particular steerage, optimization efforts is likely to be misdirected or ineffective.

  • Efficiency Bottleneck Identification

    Figuring out efficiency bottlenecks is step one towards efficient code optimization. PAPI calculators allow builders to measure varied efficiency metrics, comparable to cache misses, department mispredictions, and directions per cycle, highlighting particular areas of the code that restrict general efficiency. For instance, a excessive variety of department mispredictions, recognized utilizing a PAPI calculator, may point out the necessity for department prediction optimization or code restructuring. This focused identification of bottlenecks streamlines the optimization course of.

  • Optimization Technique Analysis

    After implementing code optimizations, measuring their influence is essential for validating their effectiveness. PAPI calculators present the instruments to quantify the efficiency enhancements achieved by completely different optimization methods. By evaluating efficiency metrics earlier than and after optimization, builders can assess the success of their efforts. For instance, measuring the cache miss charge after implementing loop optimization can reveal the discount in cache misses and the ensuing efficiency positive factors. This data-driven analysis ensures optimization efforts yield tangible enhancements.

  • Iterative Optimization Course of

    Code optimization is commonly an iterative course of. Builders make incremental adjustments, measure their influence, and refine their methods primarily based on the noticed outcomes. PAPI calculators facilitate this iterative course of by offering steady suggestions on efficiency metrics. By monitoring efficiency all through the optimization course of, builders can determine diminishing returns and modify their methods accordingly. This iterative strategy, guided by efficiency information from a PAPI calculator, results in extra environment friendly and performant code. For instance, after every optimization try, the developer can re-run the PAPI calculator to evaluate the influence and information subsequent optimization steps.

In conclusion, a PAPI calculator is a useful device for code optimization. By offering detailed efficiency metrics, it allows focused optimization, bottleneck identification, technique analysis, and an iterative optimization course of. The power to measure efficiency at a low degree empowers builders to make knowledgeable selections, resulting in important enhancements in software program efficiency and effectivity.

7. Cross-platform Assist

Cross-platform assist is an important side of Efficiency Utility Programming Interface (PAPI) primarily based calculators, impacting their utility and applicability. Efficiency evaluation wants typically span numerous {hardware} and software program environments. A cross-platform PAPI calculator addresses this want by offering constant performance and efficiency information entry throughout completely different working methods (e.g., Linux, Home windows, macOS) and processor architectures (e.g., x86, ARM, PowerPC). This functionality streamlines efficiency evaluation workflows, eliminating the necessity for platform-specific instruments or advanced information translation procedures. Think about a growth workforce optimizing an software for deployment on each x86 servers and ARM-based cellular units. A cross-platform PAPI calculator permits them to make the most of the identical efficiency evaluation device and methodologies on each platforms, simplifying information comparability and evaluation. With out cross-platform assist, separate instruments and workflows can be required, growing complexity and doubtlessly hindering correct efficiency comparisons.

Attaining cross-platform assist introduces complexities in PAPI calculator growth. {Hardware} counters and their entry mechanisms range throughout platforms. Abstracting these variations requires cautious design and implementation. The PAPI library itself performs a vital position in offering a constant interface throughout platforms. A cross-platform PAPI calculator leverages this interface, hiding the underlying platform-specific particulars from the consumer. This abstraction simplifies efficiency evaluation workflows and permits builders to give attention to decoding efficiency information slightly than navigating platform-specific intricacies. For example, the PAPI_TOT_CYC occasion (complete cycles) returns constant information regardless of the underlying processor structure, simplifying cross-platform efficiency comparisons. The PAPI calculator handles the mandatory platform-specific counter mappings internally.

The sensible significance of cross-platform assist in PAPI calculators lies in its capacity to unify efficiency evaluation workflows throughout numerous environments. This unification simplifies information assortment, evaluation, and comparability, in the end contributing to extra environment friendly code optimization and improved software efficiency throughout completely different goal platforms. Challenges stay in making certain constant accuracy and performance throughout all supported platforms. Nonetheless, the advantages of cross-platform assist are plain, making it a vital consideration for PAPI calculator growth and utilization.

8. Ease of Use

Ease of use is a important issue influencing the adoption and efficient utilization of efficiency evaluation instruments. A Efficiency Utility Programming Interface (PAPI) primarily based calculator, whereas highly effective, should be accessible to builders with various ranges of experience to maximise its influence. A user-friendly interface and simplified workflows are important for encouraging broader adoption and enabling environment friendly efficiency evaluation. This part explores the sides contributing to the convenience of use of a PAPI calculator.

  • Simplified Interface

    A well-designed interface abstracts the complexities of the underlying PAPI library, presenting customers with an easy method to work together with efficiency counters. Intuitive controls for choosing efficiency occasions, beginning and stopping information assortment, and viewing outcomes decrease the educational curve. For instance, a graphical consumer interface may present drop-down menus for occasion choice and a transparent “Begin” button for initiating information assortment, simplifying the method considerably. This simplified interface reduces the cognitive load on customers, permitting them to give attention to efficiency evaluation slightly than navigating advanced device configurations.

  • Automated Information Assortment and Reporting

    Automating information assortment and report era streamlines efficiency evaluation workflows. A PAPI calculator can present pre-defined configurations for widespread efficiency evaluation duties, automating information assortment parameters and producing reviews with related metrics. For instance, a pre-defined configuration for analyzing cache efficiency may routinely choose the related PAPI occasions, gather information, and generate a report with cache miss charges and different related metrics. This automation reduces guide effort and ensures consistency in information assortment and evaluation.

  • Clear Documentation and Examples

    Complete documentation and sensible examples are important for guiding customers by the functionalities of a PAPI calculator. Clear explanations of obtainable efficiency occasions, configuration choices, and interpretation of outcomes empower customers to successfully leverage the device. Properly-documented examples reveal typical utilization eventualities, offering sensible steerage for making use of the device to real-world efficiency evaluation duties. For example, an instance demonstrating analyze the efficiency of a matrix multiplication routine utilizing a PAPI calculator will be invaluable for customers going through related evaluation challenges. Efficient documentation reduces the time required to be taught and make the most of the device successfully.

  • Integration with Current Growth Instruments

    Seamless integration with present growth environments and workflows enhances the usability of a PAPI calculator. Integration with in style Built-in Growth Environments (IDEs) and construct methods simplifies incorporating efficiency evaluation into the event course of. For instance, integration with an IDE may enable builders to launch the PAPI calculator instantly from the IDE, choose code areas for evaluation, and think about efficiency outcomes throughout the IDE’s debugging surroundings. This integration minimizes disruptions to present workflows, encouraging the routine use of efficiency evaluation instruments.

These sides of ease of use contribute considerably to the sensible utility of a PAPI calculator. By simplifying interplay with the device, automating duties, offering clear documentation, and integrating with present workflows, builders can effectively leverage the facility of PAPI for efficiency evaluation and optimization. A give attention to ease of use democratizes entry to superior efficiency evaluation capabilities, empowering a wider vary of builders to create extra environment friendly and performant software program.

Incessantly Requested Questions

This part addresses widespread inquiries relating to efficiency evaluation instruments primarily based on the Efficiency Utility Programming Interface (PAPI).

Query 1: How does a PAPI calculator differ from conventional profiling instruments?

Conventional profiling instruments typically give attention to high-level operate name timings. A PAPI calculator gives entry to low-level {hardware} efficiency counters, enabling evaluation of microarchitectural occasions like cache misses and department mispredictions, providing deeper insights into efficiency bottlenecks.

Query 2: What are the platform compatibility limitations of PAPI calculators?

Whereas PAPI strives for cross-platform compatibility, {hardware} counter availability and entry mechanisms range. A particular PAPI calculator’s supported platforms rely on its implementation. Consulting documentation clarifies platform-specific limitations.

Query 3: How does one select the suitable PAPI occasions for efficiency evaluation?

Occasion choice will depend on the efficiency side below investigation. Analyzing cache efficiency requires occasions associated to cache accesses and misses. Investigating instruction throughput entails occasions associated to directions retired and clock cycles. Understanding the mapping between efficiency metrics and PAPI occasions is essential.

Query 4: What’s the overhead related to utilizing a PAPI calculator?

Accessing {hardware} counters introduces efficiency overhead. The magnitude of overhead will depend on elements like occasion frequency and information assortment strategies. Minimizing overhead requires cautious occasion choice and environment friendly information assortment methods.

Query 5: How does one interpret the information collected by a PAPI calculator?

Uncooked counter values require interpretation throughout the context of the appliance and goal structure. Changing uncooked values to derived metrics, comparable to cache miss charges or directions per cycle, gives actionable insights. Understanding the connection between metrics and {hardware} occasions is essential for correct interpretation.

Query 6: Can PAPI calculators be used for real-time efficiency monitoring?

Sure, PAPI helps real-time information assortment. This functionality allows monitoring efficiency fluctuations throughout software execution, aiding identification of transient efficiency points. Nonetheless, real-time monitoring can introduce greater overhead in comparison with offline evaluation.

Understanding these elements facilitates the efficient utilization of PAPI calculators for efficiency evaluation. Cautious consideration of platform compatibility, occasion choice, and information interpretation is essential for reaching significant efficiency insights.

The next sections will delve into sensible examples and case research demonstrating the appliance of PAPI calculators in real-world efficiency evaluation eventualities.

Ideas for Efficient Efficiency Evaluation

Optimizing software efficiency requires a strategic strategy. The next suggestions present steerage for leveraging efficiency evaluation instruments primarily based on the Efficiency Utility Programming Interface (PAPI) successfully.

Tip 1: Set up Clear Efficiency Objectives

Outline particular, measurable, achievable, related, and time-bound (SMART) efficiency targets earlier than initiating evaluation. For instance, purpose to scale back cache miss charges by 15% inside two weeks. Clear targets focus evaluation efforts and facilitate progress monitoring.

Tip 2: Choose Related Efficiency Occasions

Select PAPI occasions aligned with the efficiency targets. Investigating reminiscence bottlenecks requires occasions associated to cache accesses and misses. Analyzing instruction throughput necessitates occasions associated to directions retired and clock cycles. Cautious occasion choice ensures focused information assortment.

Tip 3: Isolate Efficiency Bottlenecks

Focus evaluation on particular code sections or capabilities exhibiting efficiency limitations. Profiling instruments, typically built-in with PAPI calculators, assist pinpoint efficiency hotspots. Isolating bottlenecks streamlines optimization efforts.

Tip 4: Interpret Metrics Fastidiously

Uncooked efficiency counter values require interpretation. Convert uncooked information into significant metrics, comparable to cache miss charges or directions per cycle. Think about the goal structure and software traits when decoding outcomes. Correct interpretation guides efficient optimization methods.

Tip 5: Iterate and Refine

Code optimization is an iterative course of. Implement optimization methods, measure their influence utilizing the PAPI calculator, and refine approaches primarily based on noticed outcomes. Steady monitoring and refinement maximize efficiency positive factors.

Tip 6: Think about System-Vast Results

Efficiency bottlenecks can come up from interactions between completely different system parts. Analyze efficiency information from a number of views, together with CPU, reminiscence, and I/O subsystems. A holistic view ensures complete optimization.

Tip 7: Doc Efficiency Evaluation Findings

Preserve detailed data of efficiency evaluation outcomes, optimization methods employed, and their influence. Thorough documentation facilitates future optimization efforts and aids information sharing inside growth groups.

By adhering to those suggestions, builders can leverage PAPI-based efficiency evaluation instruments successfully, resulting in important efficiency enhancements in purposes.

The next part gives a concluding perspective on efficiency evaluation and optimization strategies, emphasizing the significance of steady efficiency monitoring and adaptation to evolving {hardware} and software program landscapes.

Conclusion

This exploration has offered a complete overview of efficiency evaluation instruments primarily based on the Efficiency Utility Programming Interface (PAPI). Key elements mentioned embody leveraging {hardware} counters for exact efficiency information assortment, calculating significant efficiency metrics, figuring out and mitigating bottlenecks, and guiding code optimization methods. Cross-platform assist and ease of use concerns have been additionally highlighted, emphasizing the significance of accessible and versatile efficiency evaluation instruments.

Efficiency evaluation stays essential for maximizing software program and {hardware} effectivity. Steady developments in {hardware} architectures and software program growth methodologies necessitate ongoing adaptation and refinement of efficiency evaluation strategies. The insights gained by instruments like PAPI calculators empower builders to create high-performance purposes, contributing to a extra environment friendly and responsive computing panorama. Additional exploration of superior PAPI options and integration with different efficiency evaluation instruments gives continued alternatives for optimizing software efficiency and driving innovation in software program growth.