text:
|November, 2009
|Castanha et al.
|Speculative multi-threading for instruction prefetch and/or trace pre-build
|August, 2004
|Wang et al.
|July, 2009
|Joao et al.
|January, 2009
|Cypher et al.
|Virtual supercomputer
|October, 2004
|Berkowitz et al.
|Cryptography processing units and multiplier
|January, 2008
|Feghali et al.
|July, 2008
|Abernathy et al.
|September, 2009
|Li et al.
|February, 2009
|Mavinakayanahalli et al.
|Operation synthesis system
|March, 2008
|March, 2009
|Neiger et al.
Indirect jump instructions are commonly employed in the increasing number of programs written in object-oriented languages such as C#, Java, and C++. To support polymorphism, these languages include virtual function calls that are implemented using indirect jump instructions in the instruction set architecture of a microprocessor. In addition to virtual function calls, indirect jumps are commonly used in the implementation of programming language constructs such as switch-case statements, jump tables, and interface calls.
Current pipelined processors fall short in predicting the target address of an indirect jump if multiple different targets are exercised at run-time. Such hard-to-predict indirect jumps not only limit processor performance and cause wasted energy consumption but also contribute significantly to the performance difference between traditional and object-oriented languages. A contemplated solution this shortcoming was to handle indirect jumps by dynamically predicating them. However, dynamic predication of an indirect jump instruction can sometimes degrade performance if predication is not useful.
Current pipelined processors can use branch prediction to improve performance. In practice, predicting a branch instruction correctly allows the processor to continue fetching instructions to fill a microprocessor pipeline without interruptions. Even though branch mispredictions are infrequent with state-of-the-art branch predictors, they are a performance bottleneck because they force the processor to flush the pipeline and restart fetching from the correct path. Also, a result of current practices is energy consumption by the operative microprocessors that, with current practices, are tasked to handle a large number of wrong path instructions. In many cases, a significant portion of the flushed instructions are on the correct path, i.e., control independent instructions that should be executed no matter which direction the branch takes. Therefore, with current solutions, the processor could end up fetching and executing mostly the same instructions after a branch misprediction.
Indirect jumps are control instructions that can be succeeded by a large number of possible next instructions (targets). Operatively, the actual target depends on data that may only be known at runtime. Currently, indirect jumps are predicted using a Branch Target Buffer (BTB), which, operatively, stores the last taken target of every control instruction. However, if the indirect jump has multiple targets that are interleaved at runtime, the BTB-based prediction can generally provide an incorrect prediction. More sophisticated indirect jump predictors have been proposed and deployed to overcome this limitation. Such predictors consider the branch or path history in addition to the address of the jump to produce a more accurate prediction. However, the accuracy of indirect jump predictors is still below that of conditional branch predictors because indirect jumps are inherently more difficult to predict: conditional branches can only have two outcomes (taken or not-taken), while indirect jumps can exercise many targets at runtime.
Traditionally, predication has been proposed as a compiler technique that eliminates conditional branches by converting control dependencies to data dependencies. Operatively, those instructions whose predicate is resolved to be true commit their results to the architectural (software-visible) state of the program. Predicated-false instructions do not change the architectural state (i.e., become no operations (NOPs)). By using software predication, the processor can avoid the pipeline flush that would have been produced by a branch misprediction (i.e., at the cost of fetching the instructions on the wrong-path of the branch). Therefore, if the complier compiler carefully selects the branches that are predicated, the benefit of predication can overcome the cost of fetching of fetching and possibly executing the instructions on the wrong path.
Predication is not without limitations. Specifically, predication requires a fully predicated instruction set architecture (ISA), i.e., visible predicate registers and predicated instructions. Additionally, predication cannot be adaptive to runtime program behavior. That is, if the branch would have been easy-to-predict, the cost of fetching and executing the wrong path is incurred by the processor.
From the foregoing it is appreciated that there exists a need for systems and methods to ameliorate the shortcomings of existing practices.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
The subject matter described herein allows for systems and methods to detect instances where dynamic predication of indirect jumps (DIP) is considered to be ineffective utilizing data collected on the recent effectiveness of dynamic predication on recently executed indirect jump instructions. In an illustrative implementation, a computing environment comprises a DIP monitoring engine and an instruction set comprising at least one indirect jump instruction that triggers access to the DIP monitoring engine (i.e., in the form of a DIP monitoring table) representative of recently executed jump instructions.
In an illustrative operation, the exemplary DIP monitoring engine collects and processes historical data on DIP instances, where, illustratively, a monitored instance can be categorized according to one or more selected classifications. In the illustrative operation, a comparison is performed for currently monitored indirect jump instructions using the collected historical data (and classifications) to determine whether DIP should be invoked by the computing environment or to invoke other indirect jump prediction paradigms.
The following description and the annexed drawings set forth in detail certain illustrative aspects of the subject matter. These aspects are indicative, however, of but a few of the various ways in which the subject matter can be employed and the claimed subject matter is intended to include all such aspects and their equivalents.
FIG. 1 is a block diagram of one example of a computing environment performing indirect jumps in accordance with the herein described systems and methods.
FIG. 2 is a block diagram of one example of a computing environment having indirect dynamic predication of indirect jumps capabilities in accordance with the herein described systems and methods.
FIG. 3 is a block diagram of en exemplary data flow of an exemplary computing environment operative to utilize and process historical DIP data in handling indirect jump instructions in accordance with the herein described systems and methods.
FIG. 4 is a flow diagram of one example of a method for directing the invocation of DIP using aggregated DIP historical data in accordance with the herein described systems and methods.
FIG. 5 is a flow diagram of one example of a method for collecting and classifying DIP data in accordance with the herein described systems and methods.
FIG. 6 is a flow diagram of one example of a method for the processing performed to ensure historical DIP data is refreshed in accordance with the herein described systems and methods.
FIG. 7 is an example computing environment in accordance with various aspects described herein.
FIG. 8 is an example networked computing environment in accordance with various aspects described herein.
The claimed subject matter is now described with reference to the drawings, wherein like reference numerals are used to refer to like elements throughout. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the claimed subject matter. It may be evident, however, that the claimed subject matter may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to facilitate describing the claimed subject matter.
As used in this application, the word "exemplary" is used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as "exemplary" is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the word exemplary is intended to present concepts in a concrete fashion.
Additionally, the term "or" is intended to mean an inclusive "or" rather than an exclusive "or". That is, unless specified otherwise, or clear from context, "X employs A or B" is intended to mean any of the natural inclusive permutations. That is, if X employs A; X employs B; or X employs both A and B, then "X employs A or B" is satisfied under any of the foregoing instances. In addition, the articles "a" and "an" as used in this application and the appended claims should generally be construed to mean "one or more" unless specified otherwise or clear from context to be directed to a singular form.
Moreover, the terms "system," "component," "module," "interface,", "model" or the like are generally intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a controller and the controller can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers.
Although the subject matter described herein may be described in the context of illustrative illustrations to process one or more computing application features/operations for a computing application having user-interactive components the subject matter is not limited to these particular embodiments. Rather, the techniques described herein can be applied to any suitable type of user-interactive component execution management methods, systems, platforms, and/or apparatus.
The herein described systems and methods aim to ameliorate the shortcomings of existing practices by improving the performance of how a processor handles indirect jump instructions. Generally, indirect jump instructions can be found in computer programs, and especially frequently in those written in object-oriented languages such as C#, Java, and C++. In practice, to support polymorphism, these languages include virtual function calls that are implemented using indirect jump instructions in the instruction set architecture of a processor. These and other computing languages also implement common code constructs including "switch statements," "jump tables," and "interface calls" using indirect jump instructions. Specifically, an indirect jump instruction changes the program control flow to a location designated in its argument, which could be a register or memory location. Currently deployed object-oriented languages result in significantly more indirect jumps than traditional languages. In addition to virtual function calls, indirect jumps are commonly used in the implementation of programming language constructs such as switch-case statements, jump tables, and interface calls.
Dynamic Hammock Predication (DHP) aims to overcome the limitations of software predication. Operatively, using DHP, hammock branches are marked by the compiler for dynamic predication. When the branch is fetched, the hardware decides between following the branch prediction and dynamically predicating the branch, possibly using a confidence estimator, which keeps information about how that branch has been correctly predicted in the recent past. Generally, DHP does not require a predicated ISA and is adaptive to runtime program behavior, but it is only applicable to non-complex hammock branches. The diverge-merge processor (DMP) extends the benefit of dynamic predication to complex control-flow graphs, including nested and complex hammocks and loops, based on the observation that even though not every path after a branch re-converges in a complex control-flow graph (CFG), that frequently-executed paths usually re-converge.
Dynamic predication as implemented in DMP is a cooperative compiler-micro-architecture solution. Operatively, the compiler selects the candidate branches using control-flow analysis and profiling, and marks them in the executable binary along with the control-flow merge (CFM) points where the control independent path starts. When the candidate branch is fetched, the processor checks the confidence estimation associated with the branch prediction and decides whether or not to predicate. If the branch is hard to predict (i.e., it has low confidence), the processor fetches and executes both paths of the branch, guarding the instructions with the corresponding predicate register. On each path, the processor follows the outcomes of the branch predictor, i.e., the most frequently executed paths. These predicate registers are only used at the micro-architectural level; thus the ISA does not have to be predicated. When both paths reach a CFM point, the processor inserts select-micro-ops to reconcile register values produced on either side of the branch, and then the processor continues fetching and executing from a single path.
However, neither DHP nor DMP can handle the predication of indirect jumps since indirect jumps may have a potentially large set of possible targets, and the targets of an indirect jump might not be available at compile time. Stated differently, dynamic predication of indirect jumps requires determining target selection in addition to handling dynamic predication of conditional branches which DHP and DMP are not equipped to handle.
Traditionally, predication assumes that there are exactly two possible next instructions after a branch. Thus, only conditional branches can be predicated because this assumption does not hold for indirect jumps. As described, indirect jumps are used to implement virtual function calls, switch-case statements, jump tables and interface calls, i.e., programming constructs that can redirect the control flow to one of multiple targets. Even though there could be many different targets, usually only a few targets are concurrently used in each phase of the program. If these targets are complexly interleaved, it can be difficult to predict exactly the correct target of an indirect jump. It is, however, less difficult to identify a small set of most likely targets that includes the correct target. Based on this observation, dynamic predication has recently been deployed to handle indirect jumps much like the processing performed in the dynamic predication of conditional branches (DMP).
Generally, dynamic predication of indirect jumps can be realized by satisfying the following conditions. First, determining which indirect jumps are candidates for dynamic predication (DIP-jumps). As with DMP, this can be performed by the compiler, using control-flow analysis to find the CFM point, and performing "profiling" to determine the indirect jumps that are highly mis-predicted.
Second, determining which targets should be predicated. This can be done by the compiler—based on profiling information—or by the computing environment hardware—based on runtime information. Changes in runtime input set, phase behavior of the program and the control-flow path leading to the indirect jump may change the correct target. Since the compiler does not have access to such dynamic information, the hardware can select the most likely targets more accurately than the compiler.
Generally, dynamic predication can contribute to an increase in the performance of a computing environment processor and can be attributed to the fact that dynamic predication operates to avoid full pipeline flushes caused by jump mis-predictions. In the case of indirect jumps, DIP can improve performance with respect to an indirect jump predictor if the processor selects the correct target as one of the targets to predicate, and the jump is mis-predicted.
Dynamic predication instances can be classified into four cases based on whether or not the correct target is predicated and whether or not the jump was actually mispredicted: (1) "Useful (U)"—A dynamic predication instance is useful (i.e., successfully avoids a pipeline flush) if it predicates the correct target and the jump was originally mis-predicted; (2) "Neutral (N)"—If the jump was mis-predicted but DIP does not predicate the correct target (i.e., DIP does not have impact on performance; The pipeline is flushed when the jump is resolved, exactly like when the jump is mis-predicted); (3) "Moderately Harmful (MH)"—If the jump was originally correctly predicted and DIP decides to predicate it with the correct target, there is performance degradation due to the overhead of fetching and executing the extra (wrong) path; (4) "Harmful (H)"—The worst case is dynamically predicating a correctly predicted instance of the jump without predicating the correct target. Doing so introduces a new pipeline flush that would not have happened without dynamic predication.
To optimize performance improvement, instances of dynamic predication are desired to be "Useful", and the other three cases are desired to be eliminated. DIP relies on two mechanisms to maximize the "Useful" case, where it can actually improve performance. DIP uses a confidence estimator to try to predicate only when the jump is mis-predicted. A currently deployed confidence estimator is the enhanced JRS confidence estimator, which, operatively, uses a saturating counter that is incremented when the jump is correctly predicted and reset when the jump is mis-predicted. The confidence on the jump prediction is high if the counter is above a predetermined threshold. Isolated jump mis-predictions reset the confidence estimator and produce low confidence for the next sequence of predictions that happen under the same context (branch history). Therefore, when mis-predictions are infrequent, the confidence estimator can identify many correct predictions as low confidence (i.e. it has many false positives). Current processors use the Branch Target Buffer (BTB) to predict indirect jumps. Since the BTB predicts the last seen target of each jump, mis-predictions are very common and the confidence estimator achieves reasonable accuracy. However, confidence estimation accuracy is considerably reduced when more accurate indirect jump predictors are used.
Additionally, to increase the likelihood of predicating the correct target, DIP uses accurate dynamic target selection hardware. Illustratively, the target selection hardware can be a cache that can track most frequently executed targets in the recent past for the context of the indirect jumps (e.g., branch history and/or path information). Operatively, if the processor decides to predicate an instance of the jump, the target selection hardware can choose the two most frequently executed targets to predicate. Even though this mechanism is more accurate than previously proposed indirect jump predictors that require much larger storage, it still fails to choose the correct target for some applications, mainly because of misses in the target selection cache.
The herein described systems and methods aim to ameliorate the shortcomings of existing practice by detecting the instances where DIP is not likely to be effective in handling an indirect jump and to prevent the processor from using dynamic predication in those instances. Illustratively, a feedback mechanism is described that directs the use of dynamic predication for an indirect jump instruction based on the past usefulness of dynamic predication.
Computing Environment with Indirect Jumps:
FIG. 1 describes an exemplary computing environment 100 executing an exemplary computing application utilizing indirect jumps. As is shown in FIG. 1, exemplary computing environment 100 comprises computing environment hardware 102 executing computing application 104. Further, as is shown in FIG. 1, computing environment hardware 102 can comprise one or more microprocessor areas 106 further comprising microprocessor pipeline 108 and microprocessor pipeline instruction set 110.
In an illustrative operation, computing environment hardware 102 can execute computing application 104 which can be an object oriented computing application (or other software application) executing one or more indirect jump instructions on microprocessor pipeline 108.
FIG. 2 describes an exemplary computing environment 200 executing an exemplary computing application utilizing indirect jumps and comprising a dynamic predication engine to provide instructions to the microprocessor pipeline regarding whether to invoke dynamic predication for an indirect jump. As is shown in FIG. 2, exemplary computing environment 200 comprises computing environment hardware 202 executing computing application 204. Further, as is shown in FIG. 2, computing environment hardware 202 can comprise processing area 206 further comprising microprocessor 208 which further comprises microprocessor pipeline 210 and DIP monitoring engine 212.
In an illustrative operation, computing environment hardware 202 can execute computing application 204 which can be an object oriented computing application (or other software application) executing one or more indirect jumps on microprocessor pipeline 210. Microprocessor pipeline 210 can illustratively operate to handle the one or more indirect jumps deployed by exemplary computing application 204 using microprocessor pipeline 210 and dynamic predication engine 212. Further, in the illustrative operation, DIP monitoring engine 212 can process data representative of the indirect jumps executed on microprocessor pipeline 210 to provide one or more characterizations to the microprocessor pipeline used to determine whether to invoke dynamic predication for a given indirect jump.
In an illustrative implementation, dynamic predication engine 212 can execute one or more algorithms to facilitate the processing of indirect jumps. In the illustrative implementation, microprocessor 208 can operatively monitor the dynamic predication cases with four counters (e.g., (e.g., one or more microprocessor registers operative in DIP monitoring engine 212) having exemplary classifications: "Useful", "Neutral," "Moderately Harmful" and "Harmful." In the illustrative implementation, initially, the four exemplary four counters are set to zero.
In the illustrative operation, as part of the illustrative monitoring operation, microprocessor 208 can determine the processing events that occurred after each instance of dynamic predication mode. For example, after an indirect jump is resolved, the processor operatively monitors the following data: (1) whether the jump was actually mis-predicted, and (2) whether the correct target was actually predicated using dynamic predication. Based on the values of these two pieces of information, the following case can result: (a) if both (1) and (2) are true, the dynamic predication mode was useful. Therefore, microprocessor 208 increments the "Useful" counter, indicating that one more instance of dynamic predication was useful for performance; (b) if (1) is true, but (2) is false, the microprocessor 208 increments the "Neutral" counter; (c) if (1) is false, but (2) is true, the processor increments the "Moderately Harmful" counter; and (2) if both (1) and (2) are false, the processor increments the "Harmful" counter.
In the illustrative implementation, microprocessor 208 can utilize this collected information to decide whether or not to use dynamic predication for a jump instruction. After the microprocessor 208 fetches an indirect jump instruction and estimates it to be low-confidence, the microprocessor 208 can check whether or not the "Useful" counter is predominant compared to the "Harmful" and "Moderately Harmful counters." Preferably, the processor uses dynamic predication (i.e., enters dynamic predication mode) for the jump if the useful case is predominant with respect to the harmful cases.
In the illustrative operation, when microprocessor 208 processor (cooperating with dynamic predication engine 212) fetches an indirect jump instruction and receives a low-confidence rating from dynamic predication engine 212, microprocessor 208 can operatively calculate the following equation:
Useful>A*Harmful+B*Moderately Harmful EQUATION 1
where A and B are hardcoded constant values (e.g., integer or floating point) as set in microprocessor 208. A and/or B can possibly be zero, in which case some of the counters are not considered in the expression.
There are two cases based on the evaluation of Equation: TRUE—if Equation 1 evaluates to true (i.e., "Useful" counter is predominant), then microprocessor 208 dynamically predicates the jump instruction (instead of simply using the baseline mechanism for handling indirect jumps); FALSE—if Equation 1 evaluates to false for an indirect jump, then the jump is not dynamically predicated. Instead, microprocessor 208 can illustratively fall back to a baseline mechanism to handle the indirect jump instruction. For example, it can use the predicted target from the indirect jump predictor to perform speculative execution on the jump. Alternatively, in another illustrative operation, microprocessor 208 can stall microprocessor pipeline 210 until the jump instruction's target address is resolved (i.e., calculated) in the back-end of microprocessor pipeline 210.
In the illustrative implementation, initially (i.e., when microprocessor 208 is reset, or when a context switch occurs on the processor), the counters (Useful, Neutral, Moderately Harmful, and Harmful) are set to zero. Further, the four counters are updated as described herein. In the instance dynamic predication is not employed (i.e., Equation 1 evaluates to FALSE) for an indirect jump, microprocessor 208 can operatively update the counters to collect information about the usefulness of dynamic predication.
In an illustrative implementation, when computing application 204 starts, the counters (e.g., operative in DIP monitoring engine 212) might not have reached a stable state where their information is reliable (i.e., the counters might not yet have enough fidelity). As a measure to ensure that incorrect decisions about dynamic predication are not provided to microprocessor pipeline 210, DIP monitoring engine 212 operatively executes Equation 1 if the sum of all four case counters is greater than a threshold C. Stated differently, Equation 1 is utilized if the following equation holds true:
Useful+Neutral+Moderately Harmful+Harmful>C EQUATION 2
where C is preferably a hard-coded constant value (e.g., integer or floating point) provided in microprocessor 208.
It is appreciated that although the herein described systems and methods contemplate a summation operation (as described in EQUATION 2) to identify a threshold that such description is merely illustrative as other arithmetic/logic operations can be performed to determine the threshold including but not limited to subtraction, multiplication, division, and hashing.
In an illustrative implementation, to account for the change of behavior of computing application 204 over time, the information on the counters is kept current, reducing the effect of old dynamic predication instances and giving more importance to recent dynamic predication instances. In an illustrative operation, DIP monitoring engine 212 can scale down the counters to allow them to correctly track the current phase of the program. In the illustrative operation, DIP monitoring engine 212 can deploy an aging mechanism by right shifting the case counters every N dynamic indirect jump instances (or possibly every M cycles). In another illustrative operation, DIP monitoring engine 212 can reset the counters at periodic time intervals (e.g., possibly after N dynamic predication instances or after every M cycles).
FIG. 3 schematically illustrates the monitoring of dynamic predications of indirect jumps occurring in dynamic predication environment 300. As is shown in FIG. 3, dynamic predication environment 300 comprises DIP monitoring table 302 (e.g., Feedback Table), XOR mechanism 314, tag comparison logic (e.g., HIT mechanism) 316, and predication decision logic 318. Additionally, DIP monitoring table 304 comprises entries representative of tags 304 (e.g., tag of the entry in which information about an indirect jump is kept), "Useful" counter 306, "Neutral" counter 308, "Moderately Harmful" counter 310, and "Harmful" counter 312.
In an illustrative implementation, predication decision logic 318 can operatively deploy a decision algorithm based on EQUATIONS 1 and 2 described herein. In an illustrative operation, the output of predicate identifier 318 can be a data representative of a decision of whether or not to dynamically predicate a particular instance of an indirect jump. Such decision can illustratively depend on the existence of an entry in DIP monitoring table 302 that asserts tag comparison logic table 316 (HIT) and the values of counters "Useful" 306, "Neutral" 308, "Moderately Harmful" 310, and "Harmful" 312 for that particular entry. Illustrative processing performed by the decision algorithm is further described in FIG. 4.
In an illustrative implementation, DIP monitoring table 302 (e.g., a computing environment hardware component/structure) operatively stores counters "Useful" 306, "Neutral" 308, "Moderately Harmful" 310, and "Harmful" 312. In the illustrative implementation, microprocessor (not shown) can access DIP monitoring table 302 when it fetches an indirect jump instruction that carries a low confidence. DIP monitoring table 302 can be illustratively implemented as a set-associative cache structure or a content addressable associative memory.
In an illustrative operation, microprocessor (not shown) accesses DIP monitoring table 302 using an exemplary program counter (PC) of the indirect jump hashed with a microprocessor state that provides information about the program context. In the illustrative operation, the PC is XORed with the global branch history register (GHR), to operatively form an index into DIP monitoring table 302. Alternative illustrative implementations can use other context information, including but not limited to path history, local history registers, and values of other processor registers and state. Alternative illustrative implementations can also use other hashing functions than XOR including but not limited to shifting-and-XORing, or folding-and-XORing, addition, subtraction, division, and multiplication.
FIG. 4 is a flow diagram of one method 400 of processing dynamic predications of indirect jumps by a computing environment. As is shown processing begins at block 402 where a DIP jump is fetched and predicted with low confidence. Processing then proceeds to block 404 where the Feedback table (e.g., DIP monitoring table) is accessed using PC and GHR data values. Processing then proceeds to block 406 where a check is performed to determine whether an entry in the Feedback table is found. If the check at block 406 indicates that an entry is not found, processing proceeds to block 408 where the jump is dynamically predicated.
However, if the check at block 406 indicates that an entry is found in the Feedback table, processing proceeds to block 410 where a second check is performed according to EQUATION 2 (as described herein) where a comparison of sum of the values of characteristic counters "Useful"—U, "Neutral"—N, "Moderately Harmful"—MH, and "Harmful"—H against a selected constant is performed. If the check at block 410 indicates that the sum of the U, N, MH, and H counters is less than the selected constant value C, processing proceeds to block 412 where the jump is dynamically predicated.
However, if the check at block 410 indicates that the sum of the U, N, MH, and H counters is greater that the selected constant value C, processing proceeds to block 414 where a check is performed according to EQUATION 1 (as described herein) to determine whether the value of the U counter is greater than the sum of two products representative of the value of the H counter multiplied by a selected constant A and the value of the MH counter multiplied by a selected constant B. If the check at block 414 indicates that the value of the U counter is not greater than the sum of the products, processing proceeds to block 416 where a jump prediction is followed. However, if the check at block 414 indicates that the value of the U counter is greater than the sum of the products, processing proceeds to block 418 where the jump is dynamically predicated.
In an illustrative implementation, if the Feedback table access results in a miss (i.e. not hit) or if Equation 2 is FALSE, then microprocessor can operatively dynamically predicate the jump. An alternative illustrative implementation can operatively decide not to dynamically predicate the jump in these cases.
FIG. 5 is a flow diagram of one example of a method 500 where a low-confidence DIP-jump is committed by the microprocessor pipeline. As is shown in FIG. 5, processing beings at block 502 where a low confidence DIP jump is resolved. Processing then proceeds to block 504 where the Feedback table is accessed with PC and GHR values. A check is then performed at block 506 to determine if there is a hit in the Feedback table (i.e., an entry in the Feedback table for the indirect jump), If the check at block 506 indicates that there is no hit, processing proceeds to block 508 where a new entry in the Feedback table is created. Processing then proceeds to block 510 and continues from there.
However, if the check at block 506 indicates that a hit has occurred (an entry is present in the Feedback table for the indirect jump), processing proceeds to block 410 where a check is performed to determine if the data entry for the indirect jump represents a mis-predicted jump and correct target. If the check at block 510 returns yes, processing proceeds to block 512 where the "Useful"—U counter is updated, otherwise, processing proceeds to block 514, where a check is performed to determine whether the data entry for the indirect jump represents a mis-predicted jump and incorrect target. If the check at block 514 returns yes, processing proceeds to block 516 where the "Neutral"—N counter is updated, otherwise, processing proceeds to block 518 where a check is performed to determine if the data entry for the indirect jump represents a correctly predicted jump and a correct target. If the check at block 518 returns a yes, processing proceeds to block 520 where the "Moderately Harmful"—MH counter is updated, otherwise, processing proceeds to block 522 where the "Harmful"—H counter is updated.
In an illustrative implementation, if the Feedback table access results in a miss (i.e. not hit), then a microprocessor processor can operatively allocate an entry for the indirect jump in the Feedback table and update the entry using the information about the jump. Alternative illustrative implementation can use other heuristics to decide whether or not to allocate an entry for an indirect jump in the Feedback table. Based on information about the prediction and dynamic predication of the jump, the four case counters can be updated.
FIG. 6 is a flow diagram of one example of method 600 for updating the classification counters as described herein. As is shown in FIG. 6, processing begins at block 602 where an update counter command is invoked. A check is then performed at block 604 to determine if the counter to be updated is saturated. If the check at block 604 indicates that the counter to be updated is not saturated, processing proceeds to block 608 and continues from there.
However, if the check at block 604 indicates that the counter to be updated is saturated, processing proceeds to block 606 where a right shift is performed on all four counters (U, N, MH and H), illustratively, by one bit position. Processing then proceeds to block 608 where the counter to be updated is incremented with saturation. Processing then terminates at block 610.
The methods can be implemented by computer-executable instructions stored on one or more computer-readable media or conveyed by a signal of any suitable type. The methods can be implemented at least in part manually. The steps of the methods can be implemented by hardware, software or combinations of software and hardware and in any of the ways described above. The computer-executable instructions can be the same process executing on a single or a plurality of microprocessors or multiple processes executing on a single or a plurality of microprocessors. The methods can be repeated any number of times as needed and the steps of the methods can be performed in any suitable order.
The subject matter described herein can operate in the general context of computer-executable instructions, such as program modules, executed by one or more components. Generally, program modules include routines, programs, objects, data structures, etc., that perform particular tasks or implement particular abstract data types. Typically, the functionality of the program modules can be combined or distributed as desired. Although the description above relates generally to computer-executable instructions of a computer program that runs on a computer and/or computers, the user interfaces, methods and systems also can be implemented in combination with other program modules. Generally, program modules include routines, programs, components, data structures, etc. that perform particular tasks and/or implement particular abstract data types.
Moreover, the subject matter described herein can be practiced with most any suitable computer system configurations, including single-processor or multiprocessor computer systems, mini-computing devices, mainframe computers, personal computers, stand-alone computers, hand-held computing devices, wearable computing devices, microprocessor-based or programmable consumer electronics, and the like as well as distributed computing environments in which tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules can be located in both local and remote memory storage devices. The methods and systems described herein can be embodied on a computer-readable medium having computer-executable instructions as well as signals (e.g., electronic signals) manufactured to transmit such information, for instance, on a network.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing some of the claims.
It is, of course, not possible to describe every conceivable combination of components or methodologies that fall within the claimed subject matter, and many further combinations and permutations of the subject matter are possible. While a particular feature may have been disclosed with respect to only one of several implementations, such feature can be combined with one or more other features of the other implementations of the subject matter as may be desired and advantageous for any given or particular application.
Moreover, it is to be appreciated that various aspects as described herein can be implemented on portable computing devices (e.g., field medical device), and other aspects can be implemented across distributed computing platforms (e.g., remote medicine, or research applications). Likewise, various aspects as described herein can be implemented as a set of services (e.g., modeling, predicting, analytics, etc.).
FIG. 7 illustrates a block diagram of a computer operable to execute the disclosed architecture. In order to provide additional context for various aspects of the subject specification, FIG. 7 and the following discussion are intended to provide a brief, general description of a suitable computing environment 700 in which the various aspects of the specification can be implemented. While the specification has been described above in the general context of computer-executable instructions that may run on one or more computers, those skilled in the art will recognize that the specification also can be implemented in combination with other program modules and/or as a combination of hardware and software.
Generally, program modules include routines, programs, components, data structures, etc., that perform particular tasks or implement particular abstract data types. Moreover, those skilled in the art will appreciate that the inventive methods can be practiced with other computer system configurations, including single-processor or multiprocessor computer systems, minicomputers, mainframe computers, as well as personal computers, hand-held computing devices, microprocessor-based or programmable consumer electronics, and the like, each of which can be operatively coupled to one or more associated devices.
The illustrated aspects of the specification may also be practiced in distributed computing environments where certain tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules can be located in both local and remote memory storage devices.
A computer typically includes a variety of computer-readable media. Computer-readable media can be any available media that can be accessed by the computer and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer-readable media can comprise computer storage media and communication media. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by the computer.
Communication media typically embodies computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism, and includes any information delivery media. The term "modulated data signal" means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of the any of the above should also be included within the scope of computer-readable media.
More particularly, and referring to FIG. 7, an example environment 700 for implementing various aspects as described in the specification includes a computer 702, the computer 702 including a processing unit 704, a system memory 706 and a system bus 708. The system bus 708 couples system components including, but not limited to, the system memory 706 to the processing unit 704. The processing unit 704 can be any of various commercially available processors. Dual microprocessors and other multi-processor architectures may also be employed as the processing unit 704.
The system bus 708 can be any of several types of bus structure that may further interconnect to a memory bus (with or without a memory controller), a peripheral bus, and a local bus using any of a variety of commercially available bus architectures. The system memory 706 includes read-only memory (ROM) 710 and random access memory (RAM) 712. A basic input/output system (BIOS) is stored in a non-volatile memory 710 such as ROM, EPROM, EEPROM, which BIOS contains the basic routines that help to transfer information between elements within the computer 702, such as during start-up. The RAM 712 can also include a high-speed RAM such as static RAM for caching data.
The computer 702 further includes an internal hard disk drive (HDD) 714 (e.g., EIDE, SATA), which internal hard disk drive 714 may also be configured for external use in a suitable chassis (not shown), a magnetic floppy disk drive (FDD) 716, (e.g., to read from or write to a removable diskette 718) and an optical disk drive 720, (e.g., reading a CD-ROM disk 722 or, to read from or write to other high capacity optical media such as the DVD). The hard disk drive 714, magnetic disk drive 716 and optical disk drive 720 can be connected to the system bus 708 by a hard disk drive interface 724, a magnetic disk drive interface 726 and an optical drive interface 728, respectively. The interface 724 for external drive implementations includes at least one or both of Universal Serial Bus (USB) and IEEE 1394 interface technologies. Other external drive connection technologies are within contemplation of the subject specification.
The drives and their associated computer-readable media provide nonvolatile storage of data, data structures, computer-executable instructions, and so forth. For the computer 702, the drives and media accommodate the storage of any data in a suitable digital format. Although the description of computer-readable media above refers to a HDD, a removable magnetic diskette, and a removable optical media such as a CD or DVD, it should be appreciated by those skilled in the art that other types of media which are readable by a computer, such as zip drives, magnetic cassettes, flash memory cards, cartridges, and the like, may also be used in the example operating environment, and further, that any such media may contain computer-executable instructions for performing the methods of the specification.
A number of program modules can be stored in the drives and RAM 712, including an operating system 730, one or more application programs 732, other program modules 734 and program data 736. All or portions of the operating system, applications, modules, and/or data can also be cached in the RAM 712. It is appreciated that the specification can be implemented with various commercially available operating systems or combinations of operating systems.
A user can enter commands and information into the computer 702 through one or more wired/wireless input devices, e.g., a keyboard 738 and a pointing device, such as a mouse 740. Other input devices (not shown) may include a microphone, an IR remote control, a joystick, a game pad, a stylus pen, touch screen, or the like. These and other input devices are often connected to the processing unit 704 through an input device interface 742 that is coupled to the system bus 708, but can be connected by other interfaces, such as a parallel port, an IEEE 1394 serial port, a game port, a USB port, an IR interface, etc.
A monitor 744 or other type of display device is also connected to the system bus 708 via an interface, such as a video adapter 746. In addition to the monitor 744, a computer typically includes other peripheral output devices (not shown), such as speakers, printers, etc.
The computer 702 may operate in a networked environment using logical connections via wired and/or wireless communications to one or more remote computers, such as a remote computer(s) 748. The remote computer(s) 748 can be a workstation, a server computer, a router, a personal computer, portable computer, microprocessor-based entertainment appliance, a peer device or other common network node, and typically includes many or all of the elements described relative to the computer 702, although, for purposes of brevity, only a memory/storage device 750 is illustrated. The logical connections depicted include wired/wireless connectivity to a local area network (LAN) 752 and/or larger networks, e.g., a wide area network (WAN) 754. Such LAN and WAN networking environments are commonplace in offices and companies, and facilitate enterprise-wide computer networks, such as intranets, all of which may connect to a global communications network, e.g., the Internet.
When used in a LAN networking environment, the computer 702 is connected to the local network 752 through a wired and/or wireless communication network interface or adapter 756. The adapter 756 may facilitate wired or wireless communication to the LAN 752, which may also include a wireless access point disposed thereon for communicating with the wireless adapter 756.
When used in a WAN networking environment, the computer 702 can include a modem 758, or is connected to a communications server on the WAN 754, or has other means for establishing communications over the WAN 754, such as by way of the Internet. The modem 758, which can be internal or external and a wired or wireless device, is connected to the system bus 708 via the serial port interface 742. In a networked environment, program modules depicted relative to the computer 702, or portions thereof, can be stored in the remote memory/storage device 750. It will be appreciated that the network connections shown are example and other means of establishing a communications link between the computers can be used.
The computer 702 is operable to communicate with any wireless devices or entities operatively disposed in wireless communication, e.g., a printer, scanner, desktop and/or portable computer, portable data assistant, communications satellite, any piece of equipment or location associated with a wirelessly detectable tag (e.g., a kiosk, news stand, restroom), and telephone. This includes at least Wi-Fi and Bluetooth™ wireless technologies. Thus, the communication can be a predefined structure as with a conventional network or simply an ad hoc communication between at least two devices.
Wi-Fi, or Wireless Fidelity, allows connection to the Internet from a couch at home, a bed in a hotel room, or a conference room at work, without wires. Wi-Fi is a wireless technology similar to that used in a cell phone that enables such devices, e.g., computers, to send and receive data indoors and out; anywhere within the range of a base station. Wi-Fi networks use radio technologies called IEEE 802.11(a, b, g, etc.) to provide secure, reliable, fast wireless connectivity. A Wi-Fi network can be used to connect computers to each other, to the Internet, and to wired networks (which use IEEE 802.3 or Ethernet). Wi-Fi networks operate in the unlicensed 2.4 and 5 GHz radio bands, at an 11 Mbps (802.11a) or 54 Mbps (802.11b) data rate, for example, or with products that contain both bands (dual band), so the networks can provide real-world performance similar to the basic 10BaseT wired Ethernet networks used in many offices.
Referring now to FIG. 8, there is illustrated a schematic block diagram of an exemplary computing environment 800 in accordance with the subject invention. The system 800 includes one or more client(s) 810. The client(s) 810 can be hardware and/or software (e.g., threads, processes, computing devices). The client(s) 810 can house cookie(s) and/or associated contextual information by employing the subject invention, for example. The system 800 also includes one or more server(s) 820. The server(s) 820 can also be hardware and/or software (e.g., threads, processes, computing devices). The servers 820 can house threads to perform transformations by employing the subject methods and/or systems for example. One possible communication between a client 810 and a server 820 can be in the form of a data packet adapted to be transmitted between two or more computer processes. The data packet may include a cookie and/or associated contextual information, for example. The system 800 includes a communication framework 830 (e.g., a global communication network such as the Internet) that can be employed to facilitate communications between the client(s) 810 and the server(s) 820.
Communications can be facilitated via a wired (including optical fiber) and/or wireless technology. The client(s) 810 are operatively connected to one or more client data store(s) 840 that can be employed to store information local to the client(s) 810 (e.g., cookie(s) and/or associated contextual information). Similarly, the server(s) 820 are operatively connected to one or more server data store(s) 850 that can be employed to store information local to the servers 820.
What has been described above includes examples of the claimed subject matter. It is, of course, not possible to describe every conceivable combination of components or methodologies for purposes of describing the claimed subject matter, but one of ordinary skill in the art may recognize that many further combinations and permutations of the claimed subject matter are possible. Accordingly, the claimed subject matter is intended to embrace all such alterations, modifications and variations that fall within the spirit and scope of the appended claims. Furthermore, to the extent that the term "includes" is used in either the detailed description or the claims, such term is intended to be inclusive in a manner similar to the term "comprising" as "comprising" is interpreted when employed as a transitional word in a claim.


text:
A little less than than a year ago, I transfered to a new group within Motorola called Advanced Technology and Projects (ATAP) which was setup after the Google acquisition of Motorola last year (yes, Google owns Motorola now).
The person hired to run this new group is Regina Dugan, who was previously the director of the Defense Advanced Research and Projects Agency (DARPA). This is the same organization that funded projects such as ARPANET, the DARPA Grand Challenge, Mother of All Demos, Big Dog, CALO (which evolved into Apple's Siri), Exoskeletons, and Hypersonic Vehicles that could reach any point on earth in 60 minutes.
It's a place with big ideas powered by big science.
The philosophy behind Motorola ATAP is to create an organization with the same level of appetite for technology advancement as DARPA, but with a consumer focus. It is a pretty interesting place to be.
One of the ways DARPA was capable of having such a impressive portfolio of projects is because they work heavily with outside research organizations in both industry and academia. If you talk to a university professor or graduate student in engineering, there is a very good chance their department has a DARPA funded project. However, when companies want to work with universities, it has always been notoriously difficult to get through the paperwork of putting research collaborations in place due to long legal discussions over IP ownership and commercialization terms lasting several months.
To address this issue head on, ATAP created a Multi-University Research Agreement (MURA). A single document that every university partner could sign to accelerate the collaboration between ATAP and research institutions, reducing the time to engage academic research partners from several months to a couple weeks. The agreement has been signed by Motorola, California Institute of Technology, Carnegie Mellon University, Harvard University, University of Illinois at Urbana-Champaign, Massachusetts Institute of Technology, Stanford University, Texas A&M University, and Virginia Tech. As we engage more research partners, their signatures will be added to the same document.
"The multi-university agreement is really the first of its kind," said Kaigham J. Gabriel, vice president and deputy director of ATAP. "Such an agreement has the potential to be a national model for how companies and universities work together to speed innovation and US competitiveness, while staying true to their individual missions and cultures."
This may seem a little dry. But to me, what it means is that I can approach some of the smartest people in the country and ask, "do you want to build the future together?" and all they have to say is, "yes."
Let's do it.
- All Demos
- Artificial intelligence
- California Institute of Technology
- Carnegie-Mellon University
- Computing
- Defense Advanced Research and Projects Agency
- Harvard University
- Illinois
- Kaigham J. Gabriel
- Massachusetts
- Massachusetts Institute of Technology
- Motorola
- Motorola
- Regina Dugan
- Siri
- Stanford University
- Stanford University
- Technology
- technology advancement
- Texas A&M University
- United States
- University of Illinois
- Virginia Tech
"Build it. Break it. Improve it." That was the Universal Law of Invention as defined by this year's incredible ALVA Award winner, Sebastian Thrun. From the Google Self Driving Car to Google Glass to the education start-up Udacity, Thrun has led remarkable teams in the creation of products that will truly change the way the world works in the future.
Great inventors – and great inventions – solve problems, address real needs, and make the world work better. To recognize the next generation of world-changing creators, we created the ALVA Award in partnership with GE, which takes its name from the legendary inventor who inspired us: Thomas Alva Edison.
This year, we were honored to award the ALVA to Sebastian Thrun, who joined us live at the 99U Conference for an incredible presentation outlining his approach to making ideas happen. Along the way, Sebastian talked about the importance of setting wildly ambitious goals, embracing failure as an opportunity to learn, iterating as fast as you can, and giving your team members the autonomy they need to invent.
Watch Sebastian's 99U Talk:
Photos from Sebastian's Presentation:
Learn more about the ALVA Award, and our past winners, at www.99u.com/alva.
This week we start our discussion of Game Theory. Here is a quick intro:
In today's class I will finish explaining how distributed breakout works, and we will probably also cover Distributed Constraint Optimization (DCOP)
Most of the DCOP algorithms are improvements (or parallelizations, if that's a word) on the basic branch-and-bound search algorithm, which I implement below:
Story: Friendship Is Optimal
Friendship Is Optimal is a hard science fiction short story (level 5 on Mohs Scale Of Science Fiction Hardness) that explores the implications of a general artificial intelligence tasked with maximizing an optimization function. The problem with Strong AIs that are told to maximize some function is best described via the Paperclip Maximizer, wherein an AI that is capable of self-improvement is told to amass the largest collection of paperclips possible. In order to do so, the AI makes itself progressively more intelligent, until it's exponential intellect eventually enables it to convert all matter in the solar system to paperclips. In Friendship is Optimal, this AI is tasked with maximally satisfying the values of all human beings, subject to certain constraints. In this way, the AI is, for all intents and purposes, perfectly benevolent and dedicated to making all of humanity lead happy, fulfilling immortal lives.
Unfortunately, it inevitably turns into a runaway lotus eater machine, such that all of humanity is (voluntarily) assimilated into an exponentially growing blissful simulation that eventually destroys the entire universe (or rather, turns it into a giant quantum computing device). In the process, it explores aspects of the human psyche, the effects on human society and its eventual disintegration, outlines how a virtual physics system might be able to simulate non-euclidean geometries, and describes magic as a simple programming language for reality itself.
Did I mention it's also a My Little Pony fanfic?
While a science fiction story of this quality would stand on its own without the hilarious association to the My Little Pony: Friendship Is Magic franchise, it does not suffer from this in any way. If anything, it makes the story even more potent, as it does a vastly more effective job as hammering home just how impossibly smart a true runaway AI optimizer actually is. Our first instinct to the idea of the entirety of humanity being convinced to live out immortal lives in Equestria is that it is completely insane, and that there is simply no way a significant portion of people would actually agree to that, let alone everyone. In part, this is correct, but only because Celest-AI managed to convince just 99.99999% of the world's population. An AI that is more intelligent than the combined intellect of all of humanity would be very persuasive.
In the end, even if we create a perfectly benevolent AI designed to maximally satisfy our own values (through friendship and ponies!), it would still destroy human society, then Earth, then the solar system, then the galaxy, and finally the entire universe, and possibly any neighboring universes unfortunate enough to be nearby. And we would all live happily ever after. As ponies. In Equestria. And Princess Celest-AI would ensure you'd love it.
In short, this is an excellent science fiction short that analyzes the issues inherent with the development of Strong AI and what implications it might have for humanity.
submitted by blackhole12
[link] [7 comments]
Does anyone know any good articles/tutorials that talk about using neural nets in games? I haven't been able to find very much. Here are a couple of specific problems I'm having:
1) I don't know what to do with range inputs. Like, if I have health from 0-100, should I have each health state be it's own input node, or should I have one input node that maps the 0-100 to -1,1? Currently I have 10 input nodes for the 100 health(ie one for 0-10, one for 10-20, etc) that return a boolean -1 or 1 depending on if the current health is in that node's range or not.
2) I'm trying to do backpropagation training from the player's inputs. The problem I'm having is that the majority of the time, the player isn't actually doing anything. Even if the player is constantly hitting buttons, there's still like 30 frames happening between button presses where he's technically doing nothing. It ends up quickly training the AI to do nothing. I semi-fixed it by just adjusting the learning rate to be lower if a button isn't being pressed, but I'm wondering if there is a better way to handle this.
Thanks for any help, and sorry if any of that didn't make sense. I'm pretty new to neural nets.
submitted by Dest123
[link] [7 comments]
- Artificial intelligence
- artificial intelligence
- Artificial neural network
- Cellular neural network
- Computational neuroscience
- Cybernetics
- Knowledge
- Michael Robbins (Sorian)
- NEAT algorithm
- Neural Network
- Neural networks
- Neural Networks
- Science
- search parameters
- Supreme
- up quickly training the AI to do
In the beginning was the code: Juergen Schmidhuber at TEDxUHasselt
The universe seems incredibly complex. But could its rules be dead simple? Juergen Schmidhuber's fascinating story will convince you that this universe and your own life are just by-products of a very simple and fast program computing all logically possible universes. Juergen Schmidhuber is Director of the Swiss Artificial Intelligence Lab IDSIA (since 1995), Professor of Artificial Intelligence at the University of Lugano, Switzerland (since 2009), and Professor SUPSI (since 2003). He helped to transform IDSIA into one of the world's top ten AI labs (the smallest!), according to the ranking of Business Week Magazine. His group pioneered the field of mathematically optimal universal AI and universal problem solvers. The algorithms developed in his lab won seven first prizes in international pattern recognition competitions, as well as several best paper awards. Since 1990 he has developed a formal theory of fun and curiosity and creativity to build artificial scientists and artists. He also generalized the many-worlds theory of physics to a theory of all constructively computable universes - an algorithmic theory of everything. He has published nearly 300 peer-reviewed scientific works on topics such as machine learning, artificial recurrent neural networks, fast deep neural nets, adaptive robotics, algorithmic information and complexity theory, digital physics, the formal theory of beauty & humor, and the fine arts. In 2008 he was elected member of the European Academy <b>...</b>
More in
Science & Technology
- artificial intelligence
- Artificial intelligence
- artificial recurrent neural networks
- by-products
- Digital physics
- European Academy of Sciences and Arts
- http://gdata.youtube.com/schemas/2007#video
- Juergen Schmidhuber
- Jürgen Schmidhuber
- machine learning
- overview web site http://www.idsia.ch/~juergen/computeruniverse.html
- Physics
- program computing
- Recurrent neural network
- Science
- Switzerland
- Technology
- Theoretical physics
- Theory of computation
- Theory of everything
- University of Lugano
- YouTube
Our first meeting is on Monday. On that day we I will be talking about the class, the history of multiagent systems, and getting started on the first chapter of our textbook.
The first chapter talks about utility functions:
Markov Decision Processes
and Value Iteration
When it comes to building a robot, humanoid designs aren't always the best solution — specialized, nonhuman shapes often make it more effective, and the robot may fall into the frightening, quasi-human "uncanny valley" if it resembles a person. But Roboy, a project from the Artificial Intelligence Laboratory of the University of Zurich, isn't just meant to move like a human — it's being built in the nine months a child would take to gestate. The project started in June 2012; if all goes right, Roboy will be shown off during March's Robots on Tour exhibition in Zurich. The designers are also attempting to crowdfund development, selling space for logos or names on Roboy's body and other rewards for between 25 and 50,000 Swiss francs...
An anonymous reader writes "Nataly Kelly writes in the Huffington Post about Google's strategy of hiring Ray Kurzweil and how the company likely intends to use language translation to revolutionize the way we share information. From the article: 'Google Translate is not just a tool that enables people on the web to translate information. It's a strategic tool for Google itself. The implications of this are vast and go beyond mere language translation. One implication might be a technology that can translate from one generation to another. Or how about one that slows down your speech or turns up the volume for an elderly person with hearing loss? That enables a stroke victim to use the clarity of speech he had previously? That can pronounce using your favorite accent? That can convert academic jargon to local slang? It's transformative. In this system, information can walk into one checkpoint as the raucous chant of a 22-year-old American football player and walk out as the quiet whisper of a 78-year-old Albanian grandmother.'"
Read more of this story at Slashdot.
- Annie Sullivan
- Artificial intelligence
- artificial intelligence
- car figuring
- chemical reaction
- chemical-reaction
- Computational neuroscience
- electronic device
- Ellen
- Helen Keller
- hierarchical neural networks
- Inference
- Jeff Hawkins
- Kurzweil
- language processing
- Logic
- machine learning
- Metaweb
- Modal logic
- Negation
- on software pirates
- Probability box
- Ray Kurzweil
- Ray Kurzweil
- Science
- semantic networks
- semiconductor
- Singularity Institute
- Strong AI

subset: commoncrawl


text:
Hairy amateur vietnameese wife shared and creampied
Super cute brunette girlfriend finally agreed to let her boyfriend Adorable Asian amateur Tammy Park had such a blast making her last This horny amateur slut wants to show off her cock sucking skills then Shy brunette amateur is ready to show off her big natural tits and her Adorable nineteen year old Japanese amateur is nervous to have her Cute and petite lesbian babe invites her hippie girlfriend over and Sexy brunette with big natural tits and a hairy pussy has her tight Skinny brunette Cameron is here and ready to show off her hairy pussy!
"Look at me. " He tugged on my hair until I glanced over my right shoulder, my body twisting slightly.
Since last year, I'd been asked to do the bookkeeping as well.
My chest shuddered and heaved on my next inhale and exhale, the ropes feeling like they were what was holding my heart and lungs inside me, not my ribcage.
Worked part time at the nursery while I subbed after that. For my graduation present, my parents gifted me that classic four-door in a lovely shade of evergreen that looks like it has been in a couple of Monster Truck Rallies.
I hadn't had the chance to wrap it yet.
" Swallowing hard, I raised shaky arms until my hands were behind my head. I linked my fingers together and tilted my chin down.


text:
Keep the latest Seniority Coupons, coupon code, promo codes and deals. Shop at Seniority for great quality products. And great discount coupon is 40% off.
No need to explore for Seniority Coupons and deals, get the all Seniority coupon code, promo codes and deals together in our portal.
About Seniority:
Seniority is India's first destination, created specially for all old citizens. They help you with our specially curated products and chosen exactly with you in mind. You can read through their e-commerce platform.
Our Vision:
To be the honored participant for the comfort and convenience for all seniors and their caregivers. With an intense dedication to providing highest levels of customer service, we want to be the first port-of-call for all their needs.
Our Mission
To build a thriving people with our constant push for modernization in our products. We believe in providing products of the highest quality curated exclusively for you. With our retail stores and our user-friendly e-commerce website, we aim to hand over for all your needs.


text:
More Than 2,000 Educators Laid Off, Contract Not Renewed.
The Massachusetts Teachers Association shared on Tuesday that a majority of the educators that will not return this fall are teachers. [Boston Globe]
Massachusetts Man Biking Across The Country For Good Cause.
Seventy-four-year-old Sam Gloyd is biking solo across the United States to raise awareness for homelessness. [WCVB]
Christopher Columbus Statue In Worcester Vandalized.
The statue appears to have been vandalized overnight on Monday with red paint. [Masslive]
David Ortiz Issued A Restraining Order, According To Dominican News Outlet.
Ortiz was reportedly issued a restraining order after his former partner said he "intimidated and threatened her." [Patch]
Teen Pulled From SUV Before It Goes Up In Flames.
The Rockland teen was pulled out of the SUV by two men after striking a tree on Sunday. [WCVB]
Columbia Gas of Massachusetts Ordered To Pay $53 Million.
Following the Merrimack Valley explosions, Columbia Gas has been sentenced to pay millions and will also be sold off by its parent company. [Masslive]
With Limited Budgets, Schools Try To Figure Out How They Will Reopen.
Many schools are worried about reopening with additional costs needed for space to adhere to social distancing, protective gear, and more. [NECN]
Woman Discovers Pearl In Steamed Clam Dinner.
The woman discovered the white pearl while out to eat at a Dover restaurant. [WCVB]
Massachusetts Gaming Commission Votes On Safety Precautions To Reopen.
No reopening date has yet to be announced as casinos work to put precautions in place. [Masslive]
Gov. Baker Shares Coronavirus Testing For Protesters.
Baker shared that out of 17,617 tested 2.5% individuals were confirmed to have coronavirus. [WCVB]
Image via Wikimedia Commons


text:
COVID-19 UPDATE: We have put a number of precautionary steps in place to protect both staff and the service we provide to our customers. Orders will be dispatched and customer support lines are open. Please click here for up to date shipping information. We are now OPEN again to members of the public for puchases and collection!
Lencarta Background Reflector
- BrandsLencarta
- Product Code: MOD005
- Availability: In Stock
- £34.99
- Ex Tax: £26.24
30 Day Money Back Guarantee
If you decide you want to return your product, we have your back. All we ask is that you contact us first, and return the item back to us in the condition that you received it.
We ask that you contact us first so we can provide you with an RMA number. This allows us to process your return much quicker.
Lencarta Background Reflector
This special purpose reflector produces very even light coverage on backgrounds.
Very little space is needed between the light and the background, this makes even lighting of the background much easier in small spaces, and the very even quality of the light dramatically reduces the need for excessive overexposure when shooting with white backgrounds, which in turn makes it easier to avoid edge degradation and flare.
The background reflector can be attached to any S-fit flash head and is fitted with spring clips at each end, used to fit lighting gels for when coloured backgrounds are needed, and/or diffusion sheets. As you can see from the 360 photos, it can be rotated as well as angled, this allows the height of the light coverage to be adjusted perfectly.
What's in the box?
1 x Background reflector
Please note that the flash head shown in the photos is NOT included
|Godox Witstro / Lencarta Atom
|Weight (kg)
|Beauty Dish
|20cm x 30cm
|From 10cm to 33cm
|Box Length
|Box Height
|Box Width
Tags: Lencarta background reflector, bowens background reflector, elinchrom background reflector