This disclosure relates generally to computing devices and, more particularly, to methods and apparatus to synchronize threads.
Computing devices can consume relatively large amounts of energy when executing tasks (e.g., application threads). Power management tools may be deployed to such computing devices to manage energy expenditure and/or extend battery life. Such power management tools may extend battery life by synchronizing tasks.
In general, the same reference numbers will be used throughout the drawing(s) and accompanying written description to refer to the same or like parts. The figures are not to scale. Unless specifically stated otherwise, descriptors such as “first,” “second,” “third,” etc., are used herein without imputing or otherwise indicating any meaning of priority, physical order, arrangement in a list, and/or ordering in any way, but are merely used as labels and/or arbitrary names to distinguish elements for ease of understanding the disclosed examples. In some examples, the descriptor “first” may be used to refer to an element in the detailed description, while the same element may be referred to in a claim with a different descriptor such as “second” or “third.” In such instances, it should be understood that such descriptors are used merely for identifying those elements distinctly that might, for example, otherwise share a same name.
As used herein, “processor circuitry” is defined to include (i) one or more special purpose electrical circuits structured to perform specific operation(s) and including one or more semiconductor-based logic devices (e.g., electrical hardware implemented by one or more transistors), and/or (ii) one or more general purpose semiconductor-based electrical circuits programmable with instructions to perform specific operations and including one or more semiconductor-based logic devices (e.g., electrical hardware implemented by one or more transistors). Examples of processor circuitry include programmable microprocessors, Field Programmable Gate Arrays (FPGAs) that may instantiate instructions, Central Processor Units (CPUs), Graphics Processor Units (GPUs), Digital Signal Processors (DSPs), XPUs, or microcontrollers and integrated circuits such as Application Specific Integrated Circuits (ASICs). For example, an XPU may be implemented by a heterogeneous computing system including multiple types of processor circuitry (e.g., one or more FPGAs, one or more CPUs, one or more GPUs, one or more DSPs, etc., and/or a combination thereof) and application programming interface(s) (API(s)) that may assign computing task(s) to whichever one(s) of the multiple types of processor circuitry is/are best suited to execute the computing task(s).
Today's personal computing devices are expected to deliver real-world user experience of all day battery life, near zero-wait responsiveness, and high levels of performance. Systems (e.g., systems of personal computing devices) have been designed based on satisfying the needs of users of different classes (e.g., gamers, home users, students, etc.). Such systems deliver hardware (HW) and/or software (SW) tradeoffs to achieve different performance goals. For example, systems may include an operating system (OS) to achieve different performance goals during workload execution. However, not all applications use an OS to optimize thread scheduling on a central processing unit (CPU), and there are no global thread synchronization capabilities today that can manage application threads across multiple processing units or xPUs. Thread scheduling policies are policies that assign workloads (e.g., sets of executable instructions referred to herein as threads) to resources (e.g., CPU cores, memory, etc.).
One approach to improve battery life and device performance includes adjusting a clock (e.g., timer, time intervals, etc.) at which a device collects data. However, conventional clock configuration methodologies (e.g., OS timers, network based timers, etc.) are non-systematic, negatively impact the workload execution on the device, and lack generalization and customization capabilities. Therefore, conventional clock scheduling configurations do not achieve sufficient levels of optimization of target systems during workload execution. To address these and/or other limitations, examples disclosed herein determine a synchronized (e.g., synced, common, etc.) trigger frequency (e.g., clock source, clock interval, interval, etc.) to synchronize tasks (e.g., application threads, system settings, application settings, etc.) in the computing device. Examples disclosed herein enable overall power savings and improved user experience across multiple application threads. Examples disclosed herein enable a computing device to delay (e.g., pause) thread execution such that multiple tasks are synchronized to a synced trigger frequency (e.g., timer interval, clock interval, etc.). Examples disclosed herein enable thread synchronization across one or more applications at a platform level.
Examples disclosed herein include processor circuitry to execute the instructions to at least identify a first trigger frequency associated with a first application thread, the first trigger frequency corresponding to first times of first requests sent to the device, identify a second trigger frequency associated with a second application thread, the second trigger frequency corresponding to second times of second requests sent to the device, the second trigger frequency different from the first trigger frequency, determine a third trigger frequency based on the first and second trigger frequencies, and adjust at least one of the first or the second requests to the third trigger frequency.
In this example, the electronic device 102 is implemented as a desktop computer. However, in other examples, the electronic device 102 can be implemented by any other type of electronic device, such as a smartphone, a tablet, a laptop computer, a game console, etc.
In the illustrated example of
The example network 104 can be implemented by any suitable wired and/or wireless network(s) including, for example, one or more data buses, one or more Local Area Networks (LANs), one or more wireless LANS, one or more cellular networks, one or more public networks, etc. The example network 104 enables transmission of data (e.g., audio data) between the devices 102, 106, 108, 110 of the system 100.
In
As used herein, “application thread” and/or “thread” refers to a single, independent execution unit that is executed to perform a particular function (e.g., process). For example, a thread may be executed to decode audio data associated with video conferencing software (e.g., Skype, Microsoft Teams, etc.). Additionally or alternatively, another example thread may be executed to record video associated with video conferencing software. In the example of
The example synchronization circuitry 114 of the example of
The example identification circuitry 200 identifies trigger frequencies associated with the input devices 106 and/or the compute device 102. In particular, the example identification circuitry 200 identifies trigger frequencies associated with application threads to execute instructions on the devices 102, 106, 108, 110. For example, the identification circuitry 200 identifies a first trigger frequency associated with a first application thread (e.g., decode audio). Further, the identification circuitry 200 identifies a second trigger frequency associated with a second application thread (e.g., record video, display video, etc.). In some examples, the application threads can send requests to the compute device 102, wherein the requests occur at certain times (e.g., time intervals). As such, the example identification circuitry 200 can identify times of the requests sent to the compute device 102. Thus, the identification circuitry 200 identifies trigger frequencies based on times the requests are received at the device. In some examples, the identification circuitry 200 identifies the first trigger frequency to be 5 milliseconds (ms) and the second trigger frequency to be 7 ms. In some examples, the identification circuitry 200 is instantiated by processor circuitry executing identification instructions and/or configured to perform operations such as those represented by the flowcharts of
In some examples, the apparatus includes means for identifying trigger frequencies. For example, the means for identifying may be implemented by identification circuitry 200. In some examples, the identification circuitry 200 may be instantiated by processor circuitry such as the example processor circuitry 812 of
The example alignment circuitry 202 determines a third trigger frequency based on the first and second trigger frequencies. For example, the alignment circuitry 202 can determine a synced trigger frequency for the system 100. The example alignment circuitry 202 determines the synced trigger frequency such that the application threads executed by the system 100 (e.g., the devices 102, 106, 108, 110 of the system 100) are aligned to a common trigger frequency. In some examples, the alignment circuitry 202 determines the synced trigger frequency based on a minimum of the first or the second frequency. For example, if the first trigger frequency is 1/(5 ms)=200 Hertz (HZ) (e.g., the inverse of a first trigger period of 5 ms) and the second trigger frequency is 1/(10 ms)=100 Hz (e.g., the inverse of a second trigger period of 5 ms), then the alignment circuitry 202 determines the synced trigger frequency to be 1/(10 ms)=100 Hz. In some examples, the alignment circuitry 202 determines the synced trigger frequency based on a maximum of the first or the second frequency. For example, if the first trigger frequency is 1/(5 ms)=200 Hz and the second trigger frequency is 1/(10 ms)=100 Hz, then the alignment circuitry 202 determines the synced trigger frequency to be 1/(5 ms)=200 Hz. In some examples, the alignment circuitry 202 determines the synced trigger frequency based on an average of the first and the second trigger frequency. For example, if the first trigger frequency is 1/(5 ms)=200 Hz and the second trigger frequency is 1/(10 ms)=100 Hz, then the alignment circuitry 202 determines the synced trigger frequency to be 1/(7.5ms)=133.33 Hz. In some examples, the alignment circuitry 202 determines the synced trigger frequency based on system settings of the device 102, user settings, and/or application settings of the device 102. In some examples, the alignment circuitry 202 is instantiated by processor circuitry executing alignment instructions and/or configured to perform operations such as those represented by the flowcharts of
In some examples, the apparatus includes means for determining a synced trigger frequency. For example, the means for determining may be implemented by alignment circuitry 202. In some examples, the alignment circuitry 202 may be instantiated by processor circuitry such as the example processor circuitry 812 of
The example adjustment circuitry 204 adjusts at least one of the first and the second trigger frequencies to the third trigger frequency. In some examples, the adjustment circuitry 204 can delay (e.g., pause) the second trigger frequency such that the instructions of the second application thread execute according to the synced trigger frequency. For example, if the second trigger frequency is 1/(10 ms)=100 Hz and the synced trigger frequency is 1/(5 ms)=200 Hz, the adjustment circuitry 204 delays the second application thread (e.g., requests corresponding to the second application thread) by time period, such as 5 ms, to cause the second trigger frequency to match (e.g., align with) the synced trigger frequency. In some examples, the adjustment circuitry 204 can adjust the first and the second trigger frequencies based on the synced frequency. For example, if the synced trigger frequency is greater than the first trigger frequency and the second trigger frequency, the adjustment circuitry 204 can delay the first and the second trigger frequencies to align to the synced trigger frequency. In some examples, the adjustment circuitry 204 is instantiated by processor circuitry executing adjustment instructions and/or configured to perform operations such as those represented by the flowcharts of
In some examples, the apparatus includes means for adjusting trigger frequencies. For example, the means for adjusting may be implemented by adjustment circuitry 204. In some examples, the adjustment circuitry 204 may be instantiated by processor circuitry such as the example processor circuitry 812 of
The example notification circuitry 206 generates (e.g., sends) a notification to the compute device 102. In some examples, the notification circuitry 206 generates a notification indicating adjustments (e.g., changes) of at least one of the first or the second trigger frequencies. In some examples, the notification circuitry 206 is instantiated by processor circuitry executing notification instructions and/or configured to perform operations such as those represented by the flowcharts of
In some examples, the apparatus includes means for generating a notification. For example, the means for generating may be implemented by notification circuitry 206. In some examples, the notification circuitry 206 may be instantiated by processor circuitry such as the example processor circuitry 812 of
The example system state settings 306 can include power (e.g., power state, C state, battery life, etc.) data, Wi-Fi data, sensor sampling rate, network transmit rate, and/or audio data associated with the device 102. In this example, the system state settings 308 include central processing unit (CPU) residency 312, graphics processing unit (GPU) residency 314, vision processing unit (VPU) residency 316, infrastructure processing unit (IPU) residency 318, Wi-Fi bandwidth (BW) 320, and audio capture rate 322. As used herein, “residency” refers to a percentage of the power (e.g., battery, energy, etc.) consumed by a processing unit. For example, CPU residency 312 refers to a percentage of the power consumed based on operations of a CPU (e.g., an amount of time the device spent in a power state, waking the device from a sleep state, etc.).
The example user platform settings 308 can include frame rates associated with the devices 102, 106, 108, 110. In this example, the user platform settings 308 can include a display frame rate 324, a camera frame rate 326, and/or an encode bit rate 328. As used herein, “frame rate” refers to a frequency at which frames of video and/or pictures are displayed on a device. For example, the display frame rate 324 can refer to a number of frames-per-second (fps) the display (e.g., the display screen of the device 102) is able to draw a new image. In some examples, the camera frame rate 326 can refer to a frequency at which consecutive images (e.g., frames) are captured by a camera (e.g., the camera 108). As used herein, “bit rate” refers to a number of bits per second that can be conveyed and/or processed per unit of time. For example, the encode bit rate 328 can refer to an amount of data encoded for a unit of time. In some examples, the encode bit rate 328 can refer to video data captured in bits per second (bps) and/or audio data captured in bps.
The example application settings 310 can include user experience settings associated with the device 102. In this example, the application settings 310 include measured audio-video sync 330, targeted audio-video sync 332, targeted preview latency 334, measured preview latency 336. In some examples, the measured audio-video sync 330 and the targeted audio-video sync 332 indicates a lag (e.g., difference) between audio-video data displayed at the device 102. As used herein, “latency” refers to a delay (e.g., time delay) between a request to execute an application thread and the execution of that thread. For example, the measured preview latency 336 can refer to a time delay between a request to play a video on the display of the device 102 and the time the video begins to play on the device 102. In some examples, the system state settings 306 include the measured preview latency 336 and the measured audio-video sync 330
In some examples, the minimum value 424 includes a minimum trigger frequency based on the inputs 312, 314, 316, 318, 320, 322. For example, the CPU residency 312 trigger frequency can be 1/(15 ms)=66.66 Hz, the GPU residency 314 can be 1/(15 ms)=66.66 Hz, the VPU residency 316 trigger frequency can be 1/(10 ms)=100 Hz, the IPU residency 318 trigger frequency can be 1/(15 ms)=66.66 Hz, the Wi-Fi bandwidth 320 trigger frequency can be 1/(15 ms)=66.66 Hz, and the audio capture rate 322 trigger frequency can be 1/(10 ms)=100 Hz. In such examples, the minimum value 424 is 1/(15 ms), thereby defining a minimum trigger frequency for the inputs 312, 314, 316, 318, 320, 322 (e.g., the system state settings 306) as 1/(15 ms)=66.66 Hz. In some examples, the CPU residency 312 trigger frequency is a percentage based on an active residency of the CPU. In some examples, the GPU residency 314 trigger frequency is a percentage based on an active residency of the GPU. In some examples, the VPU residency 316 trigger frequency is a percentage based on an active residency of the VPU. Further, the IPU residency 318 trigger frequency is a percentage based on an active residency of the IPU.
In some examples, the minimum value 426 includes a minimum trigger frequency based on the inputs 324, 326, 328. For example, the display frame rate 324 can be 1/(20 ms)=50 Hz, the camera frame rate 326 can be 1/(17 ms)=58.82 Hz, and the encode bit rate 328 can be 1/(15 ms)=66.66 Hz. In such examples, the minimum value 426 is 1/(20 ms), thereby defining a minimum trigger frequency for the inputs 324, 326, 328 (e.g., the user platform settings 308) as 1/(20 ms)=50 Hz.
In some examples, the minimum value 428 includes a minimum trigger frequency based on the inputs 330, 332, 334, 336. For example, the audio-video (AV) sync latencies 330, 332 can be 12 ms and the preview latencies 334, 336 can be 12 ms. In such examples, the minimum value 428 is 12 ms, thereby defining a minimum time period for the inputs 330, 332, 334, 336 (e.g., the application settings 310) as 12 ms. In this example, minimum time period of 12 ms can be denoted in the frequency domain as 1/(12 ms)=83.33 Hz.
In
In the example time sequence 500, the first application thread 502 (e.g., audio capture rate 322) sends a request 506 at a time t1 (e.g., record audio at time t1). In turn, the example identification circuitry 200 identifies the time t1 corresponding to the request 506. In some examples, the thread 502 includes multiple ones of request 506 such that times of the multiple requests 506 define a first trigger frequency. The second application thread 504 (e.g., camera frame rate 326) sends a request 508 at a time t2 (e.g., display video at time t2). In turn, the example identification circuitry 200 identifies the time t2 corresponding to the request 508. In some examples, the thread 504 includes multiple ones of the request 508 such that times of the multiple ones of the request 508 define a second trigger frequency. In this example, the synced trigger frequency 304 corresponds to a time period Ts, wherein the time period Ts defines the length of a period of the synced trigger frequency 304 in units of time (e.g., ms). The length of a period of the synced trigger frequency 304 can be a time from t=0 to Ts. In some examples, the alignment circuitry 202 determines the synced trigger frequency as described in connection with
In
In the example of
In this example, the thread 502 also sends a request 520. In turn, the example identification circuitry 200 identifies a time t4 corresponding to the request 520. Additionally or alternatively, the thread 504 sends a request 522. In turn, the example identification circuitry 200 identifies a time t5 corresponding to the request 522. In this example, the adjustment circuitry 204 delays the requests 520, 522 to align to the first updated trigger frequency 518. Thus, the requests 520, 522 execute the instructions of the threads 502, 504 at substantially the same time. As shown in
The example timing sequence 500 includes a first notification 528. The example notification circuitry 206 generates the first notification 528 to send to the device 102. In this example, the notification circuitry 206 sends the first notification 528 in response to a change in the synced trigger frequency 304 (e.g., changing the synced trigger frequency 304 to the first updated trigger frequency 518). In some examples, the first notification 528 includes data (e.g., information, time data, etc.) indicating the change in the sync trigger frequency 304 and/or data pertaining to the first updated trigger frequency 518. In some examples, the notification circuitry 206 sends the first notification 528 to each of the devices 102, 106.
The example timing sequence 500 further includes another change in the sync trigger frequency 304 and/or the first updated trigger frequency 518 (as shown at block 530). For example, the synchronization circuitry 114 can change the first updated trigger frequency 518 based on times of the requests 520, 522, as described in detail in connection with
The example timing sequence 500 includes a second notification 536 and a third notification 538. The example notification circuitry 206 generates the second notification 536 to send to the device 102 and the third notification 538 to send to the devices 106. In this example, the notification circuitry 206 sends the second notification 536 in response to a change in the first updated trigger frequency 518 (e.g., changing the first updated trigger frequency 518 to the second updated trigger frequency 534). In some examples, the notifications 536, 538 include data (e.g., information, time data, etc.) indicating the change in the first updated trigger frequency 518 and/or data pertaining to the second updated trigger frequency 534. In some examples, the synchronization circuitry 114 utilizes the second updated trigger frequency 534 to sync subsequent requests associated with the threads 502, 504.
While an example manner of implementing the synchronization circuitry 114 of
Flowcharts representative of example machine readable instructions, which may be executed to configure processor circuitry to implement the synchronization circuitry 114 of
The machine readable instructions described herein may be stored in one or more of a compressed format, an encrypted format, a fragmented format, a compiled format, an executable format, a packaged format, etc. Machine readable instructions as described herein may be stored as data or a data structure (e.g., as portions of instructions, code, representations of code, etc.) that may be utilized to create, manufacture, and/or produce machine executable instructions. For example, the machine readable instructions may be fragmented and stored on one or more storage devices and/or computing devices (e.g., servers) located at the same or different locations of a network or collection of networks (e.g., in the cloud, in edge devices, etc.). The machine readable instructions may require one or more of installation, modification, adaptation, updating, combining, supplementing, configuring, decryption, decompression, unpacking, distribution, reassignment, compilation, etc., in order to make them directly readable, interpretable, and/or executable by a computing device and/or other machine. For example, the machine readable instructions may be stored in multiple parts, which are individually compressed, encrypted, and/or stored on separate computing devices, wherein the parts when decrypted, decompressed, and/or combined form a set of machine executable instructions that implement one or more operations that may together form a program such as that described herein.
In another example, the machine readable instructions may be stored in a state in which they may be read by processor circuitry, but require addition of a library (e.g., a dynamic link library (DLL)), a software development kit (SDK), an application programming interface (API), etc., in order to execute the machine readable instructions on a particular computing device or other device. In another example, the machine readable instructions may need to be configured (e.g., settings stored, data input, network addresses recorded, etc.) before the machine readable instructions and/or the corresponding program(s) can be executed in whole or in part. Thus, machine readable media, as used herein, may include machine readable instructions and/or program(s) regardless of the particular format or state of the machine readable instructions and/or program(s) when stored or otherwise at rest or in transit.
The machine readable instructions described herein can be represented by any past, present, or future instruction language, scripting language, programming language, etc. For example, the machine readable instructions may be represented using any of the following languages: C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML), Structured Query Language (SQL), Swift, etc.
As mentioned above, the example operations of
“Including” and “comprising” (and all forms and tenses thereof) are used herein to be open ended terms. Thus, whenever a claim employs any form of “include” or “comprise” (e.g., comprises, includes, comprising, including, having, etc.) as a preamble or within a claim recitation of any kind, it is to be understood that additional elements, terms, etc., may be present without falling outside the scope of the corresponding claim or recitation. As used herein, when the phrase “at least” is used as the transition term in, for example, a preamble of a claim, it is open-ended in the same manner as the term “comprising” and “including” are open ended. The term “and/or” when used, for example, in a form such as A, B, and/or C refers to any combination or subset of A, B, C such as (1) A alone, (2) B alone, (3) C alone, (4) A with B, (5) A with C, (6) B with C, or (7) A with B and with C. As used herein in the context of describing structures, components, items, objects and/or things, the phrase “at least one of A and B” is intended to refer to implementations including any of (1) at least one A, (2) at least one B, or (3) at least one A and at least one B. Similarly, as used herein in the context of describing structures, components, items, objects and/or things, the phrase “at least one of A or B” is intended to refer to implementations including any of (1) at least one A, (2) at least one B, or (3) at least one A and at least one B. As used herein in the context of describing the performance or execution of processes, instructions, actions, activities and/or steps, the phrase “at least one of A and B” is intended to refer to implementations including any of (1) at least one A, (2) at least one B, or (3) at least one A and at least one B. Similarly, as used herein in the context of describing the performance or execution of processes, instructions, actions, activities and/or steps, the phrase “at least one of A or B” is intended to refer to implementations including any of (1) at least one A, (2) at least one B, or (3) at least one A and at least one B.
As used herein, singular references (e.g., “a”, “an”, “first”, “second”, etc.) do not exclude a plurality. The term “a” or “an” object, as used herein, refers to one or more of that object. The terms “a” (or “an”), “one or more”, and “at least one” are used interchangeably herein. Furthermore, although individually listed, a plurality of means, elements or method actions may be implemented by, e.g., the same entity or object. Additionally, although individual features may be included in different examples or claims, these may possibly be combined, and the inclusion in different examples or claims does not imply that a combination of features is not feasible and/or advantageous.
At block 604, the example alignment circuitry 202 determines the synced trigger frequency 304 (e.g., trigger frequencies 518, 534, etc.), which is further described in connection with
At block 606, the example adjustment circuitry 204 adjusts at least one of the first or the second trigger frequencies to the synced trigger frequency 304. For example, the example adjustment circuitry 204 adjusts the request 506 (e.g., multiple ones of the request 506) to align to the synced trigger frequency 304 and adjusts the request 508 (e.g., multiple ones of the request 508) to align to the synced trigger frequency 304. In some examples, the adjustment circuitry 204 delays the request 506 and/or the request 508 to align to the synced trigger frequency 304. For example, if the request occurs or is otherwise associated with a time t1=4 ms and the synced trigger frequency 304 is associated with a period with a next transition at Ts=10 ms, then the adjustment circuitry 204 can pause the request 506 for 6 ms to align with Ts. Additionally or alternatively, if the request occurs or is otherwise associated with a time t2=7 ms and the synced trigger frequency 304 is associated with a period with a next transition at Ts=10, then the adjustment circuitry 204 can pause the request 508 for 3 ms to align with Ts.
At block 608, the example notification circuitry 206 generates a notification (e.g., the notifications 528, 536, 538, etc.) to send to the devices (e.g., the devices 102, 106, etc.). In some examples, the notification circuitry 206 generates the first notification 528 to send to the device 102. In particular, the notification circuitry 206 sends the first notification 528 in response to a change in the synced trigger frequency 304. In some examples, the first notification 528 includes data (e.g., information, time data, etc.) indicating the change in the sync trigger frequency 304 and/or data pertaining to the first updated trigger frequency 518. In some examples, the notification circuitry 206 generates the second notification 536 to send to the device 102 and the third notification 538 to send to the devices 106. In particular, the notification circuitry 206 sends the second notification 536 in response to a change in the first updated trigger frequency 518. In some examples, the notifications 536, 538 include data (e.g., information, time data, etc.) indicating the change in the first updated trigger frequency 518 and/or data pertaining to the second updated trigger frequency 534.
At block 610, the identification circuitry 200 and/or the alignment circuitry 202 determines whether to repeat the process. If the process is to be repeated (block 610), the process returns to block 602. Otherwise the process ends.
At block 702, the example alignment circuitry 202 determines whether the first trigger frequency is less than the second trigger frequency. In some examples, the first trigger frequency associated with the thread 502 is 1/(12 ms)=83.33 Hz and the second trigger frequency associated with the thread 504 is 1/(15 ms)=66.66 Hz. In some examples, the first trigger frequency associated with the thread 502 is 1/(15 ms)=66.66 Hz and the second trigger frequency associated with the thread 504 is 1/(12 ms)=83.33 Hz. If the first trigger frequency is less than the second trigger frequency (block 702), control of the process proceeds to block 704. Otherwise, the process proceeds to block 706.
At block 704, the example alignment circuitry 202 determines the first trigger frequency (e.g., 1/(15 ms)=66.66 Hz) as the synced trigger frequency 304. Then, the process ends.
At block 706, the example alignment circuitry 202 determines the second trigger frequency (e.g., 1/(15 ms)=66.66 Hz) as the synced trigger frequency 304. Then, the process ends.
The processor platform 800 of the illustrated example includes processor circuitry 812. The processor circuitry 812 of the illustrated example is hardware. For example, the processor circuitry 812 can be implemented by one or more integrated circuits, logic circuits, FPGAs, microprocessors, CPUs, GPUs, DSPs, and/or microcontrollers from any desired family or manufacturer. The processor circuitry 812 may be implemented by one or more semiconductor based (e.g., silicon based) devices. In this example, the processor circuitry 812 implements the example synchronization circuitry 114, the example identification circuitry 200, the example alignment circuitry 202, the example adjustment circuitry 204, and the example notification circuitry 206.
The processor circuitry 812 of the illustrated example includes a local memory 813 (e.g., a cache, registers, etc.). The processor circuitry 812 of the illustrated example is in communication with a main memory including a volatile memory 814 and a non-volatile memory 816 by a bus 818. The volatile memory 814 may be implemented by Synchronous Dynamic Random Access Memory (SDRAM), Dynamic Random Access Memory (DRAM), RAMBUS® Dynamic Random Access Memory (RDRAM®), and/or any other type of RAM device. The non-volatile memory 816 may be implemented by flash memory and/or any other desired type of memory device. Access to the main memory 814, 816 of the illustrated example is controlled by a memory controller 817.
The processor platform 800 of the illustrated example also includes interface circuitry 820. The interface circuitry 820 may be implemented by hardware in accordance with any type of interface standard, such as an Ethernet interface, a universal serial bus (USB) interface, a Bluetooth® interface, a near field communication (NFC) interface, a Peripheral Component Interconnect (PCI) interface, and/or a Peripheral Component Interconnect Express (PCIe) interface.
In the illustrated example, one or more input devices 822 are connected to the interface circuitry 820. The input device(s) 822 permit(s) a user to enter data and/or commands into the processor circuitry 812. The input device(s) 822 can be implemented by, for example, an audio sensor, a microphone, a camera (still or video), a keyboard, a button, a mouse, a touchscreen, a track-pad, a trackball, an isopoint device, and/or a voice recognition system.
One or more output devices 824 are also connected to the interface circuitry 820 of the illustrated example. The output device(s) 824 can be implemented, for example, by display devices (e.g., a light emitting diode (LED), an organic light emitting diode (OLED), a liquid crystal display (LCD), a cathode ray tube (CRT) display, an in-place switching (IPS) display, a touchscreen, etc.), a tactile output device, a printer, and/or speaker. The interface circuitry 820 of the illustrated example, thus, typically includes a graphics driver card, a graphics driver chip, and/or graphics processor circuitry such as a GPU.
The interface circuitry 820 of the illustrated example also includes a communication device such as a transmitter, a receiver, a transceiver, a modem, a residential gateway, a wireless access point, and/or a network interface to facilitate exchange of data with external machines (e.g., computing devices of any kind) by a network 826. The communication can be by, for example, an Ethernet connection, a digital subscriber line (DSL) connection, a telephone line connection, a coaxial cable system, a satellite system, a line-of-site wireless system, a cellular telephone system, an optical connection, etc.
The processor platform 800 of the illustrated example also includes one or more mass storage devices 828 to store software and/or data. Examples of such mass storage devices 828 include magnetic storage devices, optical storage devices, floppy disk drives, HDDs, CDs, Blu-ray disk drives, redundant array of independent disks (RAID) systems, solid state storage devices such as flash memory devices and/or SSDs, and DVD drives.
The machine readable instructions 832, which may be implemented by the machine readable instructions of
The cores 902 may communicate by a first example bus 904. In some examples, the first bus 904 may be implemented by a communication bus to effectuate communication associated with one(s) of the cores 902. For example, the first bus 904 may be implemented by at least one of an Inter-Integrated Circuit (I2C) bus, a Serial Peripheral Interface (SPI) bus, a PCI bus, or a PCIe bus. Additionally or alternatively, the first bus 904 may be implemented by any other type of computing or electrical bus. The cores 902 may obtain data, instructions, and/or signals from one or more external devices by example interface circuitry 906. The cores 902 may output data, instructions, and/or signals to the one or more external devices by the interface circuitry 906. Although the cores 902 of this example include example local memory 920 (e.g., Level 1 (L1) cache that may be split into an L1 data cache and an Ll instruction cache), the microprocessor 900 also includes example shared memory 910 that may be shared by the cores (e.g., Level 2 (L2 cache)) for high-speed access to data and/or instructions. Data and/or instructions may be transferred (e.g., shared) by writing to and/or reading from the shared memory 910. The local memory 920 of each of the cores 902 and the shared memory 910 may be part of a hierarchy of storage devices including multiple levels of cache memory and the main memory (e.g., the main memory 814, 816 of
Each core 902 may be referred to as a CPU, DSP, GPU, etc., or any other type of hardware circuitry. Each core 902 includes control unit circuitry 914, arithmetic and logic (AL) circuitry (sometimes referred to as an ALU) 916, a plurality of registers 918, the local memory 920, and a second example bus 922. Other structures may be present. For example, each core 902 may include vector unit circuitry, single instruction multiple data (SIMD) unit circuitry, load/store unit (LSU) circuitry, branch/jump unit circuitry, floating-point unit (FPU) circuitry, etc. The control unit circuitry 914 includes semiconductor-based circuits structured to control (e.g., coordinate) data movement within the corresponding core 902. The AL circuitry 916 includes semiconductor-based circuits structured to perform one or more mathematic and/or logic operations on the data within the corresponding core 902. The AL circuitry 916 of some examples performs integer based operations. In other examples, the AL circuitry 916 also performs floating point operations. In yet other examples, the AL circuitry 916 may include first AL circuitry that performs integer based operations and second AL circuitry that performs floating point operations. In some examples, the AL circuitry 916 may be referred to as an Arithmetic Logic Unit (ALU). The registers 918 are semiconductor-based structures to store data and/or instructions such as results of one or more of the operations performed by the AL circuitry 916 of the corresponding core 902. For example, the registers 918 may include vector register(s), SIMD register(s), general purpose register(s), flag register(s), segment register(s), machine specific register(s), instruction pointer register(s), control register(s), debug register(s), memory management register(s), machine check register(s), etc. The registers 918 may be arranged in a bank as shown in
Each core 902 and/or, more generally, the microprocessor 900 may include additional and/or alternate structures to those shown and described above. For example, one or more clock circuits, one or more power supplies, one or more power gates, one or more cache home agents (CHAs), one or more converged/common mesh stops (CMSs), one or more shifters (e.g., barrel shifter(s)) and/or other circuitry may be present. The microprocessor 900 is a semiconductor device fabricated to include many transistors interconnected to implement the structures described above in one or more integrated circuits (ICs) contained in one or more packages. The processor circuitry may include and/or cooperate with one or more accelerators. In some examples, accelerators are implemented by logic circuitry to perform certain tasks more quickly and/or efficiently than can be done by a general purpose processor. Examples of accelerators include ASICs and FPGAs such as those discussed herein. A GPU or other programmable device can also be an accelerator. Accelerators may be on-board the processor circuitry, in the same chip package as the processor circuitry and/or in one or more separate packages from the processor circuitry.
More specifically, in contrast to the microprocessor 900 of
In the example of
The configurable interconnections 1010 of the illustrated example are conductive pathways, traces, vias, or the like that may include electrically controllable switches (e.g., transistors) whose state can be changed by programming (e.g., using an HDL instruction language) to activate or deactivate one or more connections between one or more of the logic gate circuitry 1008 to program desired logic circuits.
The storage circuitry 1012 of the illustrated example is structured to store result(s) of the one or more of the operations performed by corresponding logic gates. The storage circuitry 1012 may be implemented by registers or the like. In the illustrated example, the storage circuitry 1012 is distributed amongst the logic gate circuitry 1008 to facilitate access and increase execution speed.
The example FPGA circuitry 1000 of
Although
In some examples, the processor circuitry 812 of
A block diagram illustrating an example software distribution platform 1105 to distribute software such as the example machine readable instructions 832 of
From the foregoing, it will be appreciated that example systems, methods, apparatus, and articles of manufacture have been disclosed that determine a synchronized trigger frequency to synchronize tasks in a computing device. Examples disclosed herein enable overall power savings and improved user experience across multiple application threads. Examples disclosed herein enable a computing device to delay thread execution such that multiple tasks are synchronized to a synced trigger frequency. Disclosed systems, methods, apparatus, and articles of manufacture improve the efficiency of using a computing device by improving battery life and/or optimizing power consumption. Disclosed systems, methods, apparatus, and articles of manufacture are accordingly directed to one or more improvement(s) in the operation of a machine such as a computer or other electronic and/or mechanical device.
Example 1 includes an apparatus to generate a synchronized trigger frequency for a device, the apparatus comprising at least one memory, machine readable instructions, and processor circuitry to at least one of instantiate or execute the machine readable instructions to identify a first trigger frequency associated with a first application thread, the first trigger frequency corresponding to first times of first requests associated with the first application thread, identify a second trigger frequency associated with a second application thread, the second trigger frequency corresponding to second times of second requests associated with the second application thread, the second trigger frequency different from the first trigger frequency, determine a third trigger frequency based on the first and second trigger frequencies, and adjust at least one of the first requests or the second requests to the third trigger frequency.
Example 2 includes the apparatus of example 1, wherein at least one of the first trigger frequency or the second trigger frequency is associated with a user platform setting, the user platform setting including at least one of a display frame rate, a camera frame rate, or an encode bit rate.
Example 3 includes the apparatus of example 1, wherein at least one of the first trigger frequency or the second trigger frequency is associated with a system state setting, the system state setting including at least one of central processing unit (CPU) bandwidth, graphics processing unit (GPU) bandwidth, vision processing unit (VPU) bandwidth, infrastructure processing unit (IPU) bandwidth, Wi-Fi bandwidth, or an audio capture rate.
Example 4 includes the apparatus of example 1, wherein at least one of the first trigger frequency or the second trigger frequency is associated with an application setting, the application setting including at least one of measured preview latency, targeted preview latency, measured audio/video sync, or targeted audio/video sync.
Example 5 includes the apparatus of example 1, wherein the processor circuitry is to determine the third trigger frequency based on a minimum of the first trigger frequency and the second trigger frequency.
Example 6 includes the apparatus of example 1, wherein the processor circuitry is to determine the third trigger frequency based on a maximum of the first trigger frequency and the second trigger frequency.
Example 7 includes the apparatus of example 1, wherein the processor circuitry is to determine the third trigger frequency based on an average of the first trigger frequency and the second trigger frequency.
Example 8 includes the apparatus of example 1, wherein the processor circuitry is to adjust the at least one of the first requests or the second requests by delaying processing of the at least one of the first requests or the second requests by the device.
Example 9 includes the apparatus of example 1, wherein the processor circuitry is to generate a notification, the notification to identify an adjustment of at least one of the first trigger frequency or the second trigger frequency.
Example 10 includes At least one non-transitory computer readable medium comprising instructions that, when executed, cause processor circuitry to at least identify a first trigger frequency associated with a first application thread, the first trigger frequency corresponding to first times of first requests associated with the first application thread, identify a second trigger frequency associated with a second application thread, the second trigger frequency corresponding to second times of second requests associated with the second application thread, the second trigger frequency different from the first trigger frequency, determine a third trigger frequency based on the first and second trigger frequencies, and adjust at least one of the first requests or the second requests to the third trigger frequency.
Example 11 includes the at least one non-transitory computer readable medium of example 10, wherein at least one of the first trigger frequency or the second trigger frequency is associated with a user platform setting, the user platform setting including at least one of a display frame rate, a camera frame rate, or an encode bit rate.
Example 12 includes the at least one non-transitory computer readable medium of example 10, wherein at least one of the first trigger frequency or the second trigger frequency is associated with a system state setting, the system state setting including at least one of central processing unit (CPU) bandwidth, graphics processing unit (GPU) bandwidth, vision processing unit (VPU) bandwidth, infrastructure processing unit (IPU) bandwidth, Wi-Fi bandwidth, or an audio capture rate.
Example 13 includes the at least one non-transitory computer readable medium of example 10, wherein at least one of the first trigger frequency or the second trigger frequency is associated with an application setting, the application setting including at least one of measured preview latency, targeted preview latency, measured audio/video sync, or targeted audio/video sync.
Example 14 includes the at least one non-transitory computer readable medium of example 10, wherein the instructions cause the processor circuitry to determine the third trigger frequency based on a minimum of the first trigger frequency and the second trigger frequency.
Example 15 includes the at least one non-transitory computer readable medium of example 10, wherein the instructions cause the processor circuitry to determine the third trigger frequency based on a maximum of the first trigger frequency and the second trigger frequency.
Example 16 includes the at least one non-transitory computer readable medium of example 10, wherein the instructions cause the processor circuitry to determine the third trigger frequency based on an average of the first trigger frequency and the second trigger frequency.
Example 17 includes the at least one non-transitory computer readable medium of example 10, wherein the instructions cause the processor circuitry to adjust the at least one of the first requests or the second requests by delaying processing of the at least one of the first requests or the second requests.
Example 18 includes the at least one non-transitory computer readable medium of example 10, wherein the instructions cause the processor circuitry to generate a notification, the notification to identify an adjustment of at least one of the first trigger frequency or the second trigger frequency.
Example 19 includes an apparatus comprising means for identifying trigger frequencies, the means for identifying to identify a first trigger frequency associated with a first application thread, the first trigger frequency corresponding to first times of first requests associated with the first application thread, identify a second trigger frequency associated with a second application thread, the second trigger frequency corresponding to second times of second requests associated with the second application thread, the second trigger frequency different from the first trigger frequency, means for determining a third trigger frequency based on the first and second trigger frequencies, and means for adjusting at least one of the first requests or the second requests to the third trigger frequency.
Example 20 includes the apparatus of example 19, wherein at least one of the first trigger frequency or the second trigger frequency is associated with a user platform setting, the user platform setting including at least one of a display frame rate, a camera frame rate, or an encode bit rate.
Example 21 includes the apparatus of example 19, wherein at least one of the first trigger frequency or the second trigger frequency is associated with a system state setting, the system state setting including at least one of central processing unit (CPU) bandwidth, graphics processing unit (GPU) bandwidth, vision processing unit (VPU) bandwidth, infrastructure processing unit (IPU) bandwidth, Wi-Fi bandwidth, or an audio capture rate.
Example 22 includes the apparatus of example 19, wherein at least one of the first trigger frequency or the second trigger frequency is associated with an application setting, the application setting including at least one of measured preview latency, targeted preview latency, measured audio/video sync, or targeted audio/video sync.
Example 23 includes the apparatus of example 19, wherein the means for determining is to determine the third trigger frequency based on a minimum of the first trigger frequency and the second trigger frequency.
Example 24 includes the apparatus of example 19, wherein the means for determining is to determine the third trigger frequency based on a maximum of the first trigger frequency and the second trigger frequency.
Example 25 includes the apparatus of example 19, wherein the means for determining is to determine the third trigger frequency based on an average of the first trigger frequency and the second trigger frequency.
Example 26 includes the apparatus of example 19, wherein the means for adjusting is to adjust the at least one of the first requests or the second requests by delaying processing of the at least one of the first requests or the second requests.
Example 27 includes the apparatus of example 19, further including means for generating a notification, the notification to identify an adjustment of at least one of the first trigger frequency or the second trigger frequency.
Example 28 includes a method comprising identifying a first trigger frequency associated with a first application thread, the first trigger frequency corresponding to first times of first requests associated with the first application thread, identifying a second trigger frequency associated with a second application thread, the second trigger frequency corresponding to second times of second requests associated with the second application thread, the second trigger frequency different from the first trigger frequency, determining a third trigger frequency based on the first and second trigger frequencies, and adjusting at least one of the first requests or the second requests to the third trigger frequency.
Example 29 includes the method of example 28, wherein at least one of the first trigger frequency or the second trigger frequency is associated with a user platform setting, the user platform setting including at least one of a display frame rate, a camera frame rate, or an encode bit rate.
Example 30 includes the method of example 28, wherein at least one of the first trigger frequency or the second trigger frequency is associated with a system state setting, the system state setting including at least one of central processing unit (CPU) bandwidth, graphics processing unit (GPU) bandwidth, vision processing unit (VPU) bandwidth, infrastructure processing unit (IPU) bandwidth, Wi-Fi bandwidth, or an audio capture rate.
Example 31 includes the method of example 28, wherein at least one of the first trigger frequency or second trigger frequency is associated with an application setting, the application setting including at least one of measured preview latency, targeted preview latency, measured audio/video sync, or targeted audio/video sync.
Example 32 includes the method of example 28, further including determining the third trigger frequency based on a minimum of the first trigger frequency and the second trigger frequency.
Example 33 includes the method of example 28, further including determining the third trigger frequency based on a maximum of the first trigger frequency and the second trigger frequency.
Example 34 includes the method of example 28, further including determining the third trigger frequency based on an average of the first trigger frequency and the second trigger frequency.
Example 35 includes the method of example 28, further including adjusting the at least one of the first requests or the second requests by delaying processing of the at least one of the first requests or the second requests.
Example 36 includes the method of example 28, further including generating a notification, the notification to identify an adjustment of at least one of the first trigger frequency or the second trigger frequency.
The following claims are hereby incorporated into this Detailed Description by this reference. Although certain example systems, methods, apparatus, and articles of manufacture have been disclosed herein, the scope of coverage of this patent is not limited thereto. On the contrary, this patent covers all systems, methods, apparatus, and articles of manufacture fairly falling within the scope of the claims of this patent.