1. A method for parallelizing execution of a computer program, comprising:
identifying a first code block that contains an assignment of a variable;
traversing a path backwards through a control flow graph of the computer program, starting with the identified code block;
identifying all blocks along the path until the path reaches a loop header block;
indicating all the identified blocks in a first set;
for each block in the first set, a) determining blocks in the program that logically succeed the block and are not in the first set, and b) identifying all paths between the block and the determined blocks as failure paths;
inserting code into the failure paths, wherein the inserted code comprises instructions for causing a computer to identify the corresponding path as failed at run time of the program; and
storing the program including the inserted code.
2. The method of claim 1, wherein the traversing comprises recursively visiting each code block that logically precedes the first code block.
3. The method of claim 1, comprising:
for each loop in the program, determining all variables that are defined only once in the loop, are not defined in any inner loop of the loop, and are used in the loop; and
identifying the determined variables as value predictable variables.
4. The method of claim 1, comprising:
for each of the determined blocks that is not in the first set, that has at least one predecessor block in the first set and that has no predecessor blocks outside the first set, indicating the determined block in a second set;
for each of the determined blocks that is not in the first set, that has at least one predecessor block outside the first set and that has at least one predecessor block in the first set, creating for each of the at least one predecessor block in the first set a new block, inserting the new block between the corresponding predecessor block and the determined block, and indicating the new block in the second set; and
inserting code into failure paths indicated by the second set, wherein the inserted code comprises instructions for causing a computer to identify the corresponding path as failed at run time of the program.
5. The method of claim 1, wherein the variable is a scalar variable.
6. The method of claim 1, comprising:
at run time if a value of a value predictable variable in a speculative thread is wrong, then copying out a last known correct value of the value predictable variable to a shared location; and
at run time in a speculative thread, copying out a value predictable variable to a temporary location prior to commit.
7. The method of claim 6, comprising.
at run time if a value of a value predictable variable in a speculative thread is wrong, then quashing all subsequent speculative threads of the program.
8. Apparatus comprising a processor, wherein the apparatus is configured to:
receive a computer program;
identify a code block of the program that contains an assignment of a variable;
traverse a path backwards through a control flow graph of the computer program, starting with the identified code block;
identify all blocks along the path until the path reaches a loop header block;
indicate all the identified blocks in a first set;
for each block in the first set, a) determine blocks in the program that logically succeed the block and are not in the first set, and b) identify all paths between the block and the determined blocks as failure paths;
insert code into the failure paths, wherein the inserted code comprises instructions for causing a computer to identify the corresponding path as failed at run time of the program; and
store the program including the inserted code.
9. The apparatus of claim 8, wherein the apparatus is configured to traverse the path backwards by recursively visiting each code block that logically precedes the first code block.
10. The apparatus of claim 8, wherein the apparatus is configured to:
for each loop in the program, determine all variables that are defined only once in the loop, are not defined in any inner loop of the loop, and are used in the loop; and
identify the determined variables as value predictable variables.
11. The apparatus of claim 8, wherein the apparatus is configured to:
for each of the determined blocks that is not in the first set, that has at least one predecessor block in the first set and that has no predecessor blocks outside the first set, indicate the determined block in a second set;
for each of the determined blocks that is not in the first set, that has at least one predecessor block outside the first set and that has at least one predecessor block in the first set, create for each of the at least one predecessor block in the first set a new block, insert the new block between the corresponding predecessor block and the determined block, and indicate the new block in the second set; and
insert code into failure paths indicated by the second set, wherein the inserted code comprises instructions for causing a computer to identify the corresponding path as failed at run time of the program.
12. The apparatus of claim 8, wherein the variable is a scalar variable.
13. The apparatus of claim 8, wherein the apparatus is configured to associate code with the program wherein the associated code comprises instructions for causing a computer at runtime of the program to determine that a value of a value predictable variable in a speculative thread is wrong and in response to the determination copy out a last known correct value of the value predictable variable to a shared location.
14. The apparatus of claim 13, wherein the apparatus is configured to associate code with the program wherein the associated code comprises instructions for causing a computer at runtime of the program to determine that a value of a value predictable variable in a speculative thread is wrong and in response to the determination quash all subsequent speculative threads of the program.
15. The apparatus of claim 8, wherein the apparatus is configured to associate code with the program wherein the associated code comprises instructions for causing a computer at runtime in a speculative thread of the program to copy out a value predictable variable to a temporary location prior to commit.
16. A computer readable storage medium comprising instructions for causing a computer to perform:
identifying in a computer program a code block that contains an assignment of a variable;
traversing a path backwards through a control flow graph of the computer program, starting with the identified code block;
identifying all blocks along the path until the path reaches a loop header block;
indicating all the identified blocks in a first set;
for each block in the first set, a) determining blocks in the program that logically succeed the block and are not in the first set, and b) identifying all paths between the block and the determined blocks as failure paths;
inserting code into the failure paths, wherein the inserted code comprises instructions for causing a computer to identify the corresponding path as failed at run time of the program; and
storing the program including the inserted code.
17. The medium of claim 16, wherein the traversing comprises recursively visiting each code block that logically precedes the first code block.
18. The medium of claim 16, wherein the medium comprises instructions for causing the computer to perform:
for each loop in the program, determining all variables that are defined only once in the loop, are not defined in any inner loop of the loop, and are used in the loop; and
identifying the determined variables as value predictable variables.
19. The medium of claim 16, wherein the medium comprises instructions for causing the computer to perform:
for each of the determined blocks that is not in the first set, that has at least one predecessor block in the first set and that has no predecessor blocks outside the first set, indicating the determined block in a second set;
for each of the determined blocks that is not in the first set, that has at least one predecessor block outside the first set and that has at least one predecessor block in the first set, creating for each of the at least one predecessor block in the first set a new block, inserting the new block between the corresponding predecessor block and the determined block, and indicating the new block in the second set; and
inserting code into failure paths indicated by the second set, wherein the inserted code comprises instructions for causing a computer to identify the corresponding path as failed at run time of the program.
20. The medium of claim 16, wherein the variable is a scalar variable.
21. The medium of claim 16, wherein the medium comprises instructions for causing the computer to perform:
at run time of the program in a speculative thread of the program, copying out a last known correct value of a value predictable variable to a shared location when a value of the value predictable variable in the speculative thread is wrong;
at run time in a speculative thread of the program, copying out a value predictable variable to a temporary location prior to commit.
22. The medium of claim 16, wherein the medium comprises instructions for causing the computer to perform:
determining at run time that a value of a value predictable variable in a speculative thread is wrong; and
quashing all subsequent speculative threads of the program.
The claims below are in addition to those above.
All refrences to claim(s) which appear below refer to the numbering after this setence.
1. A method of manufacturing antennas comprising:
forming at least one conductive antenna array pattern having an antenna feed network on at least a first relatively flexible substrate; and
adhering said at least one flexible substrate to at least one first surface of at least one relatively rigid substrate.
2. A method according to claim 1 and including forming at least one conductive antenna array pattern having a plurality of antenna radiators on at least a second relatively flexible substrate.
3. A method according to claim 2 and including adhering said at least second flexible substrate to at least one second surface of said at least one relatively rigid substrate.
4. A method according to claim 1 and including mounting said at least one relatively rigid substrate having adhered thereto said at least first flexible substrate onto a dielectric support.
5. A method according to claim 3 and including mounting said at least one relatively rigid substrate having adhered thereto said at least first and second flexible substrates onto a dielectric support.
6. A method according to claim 1 and wherein said at least first flexible substrate is adhered to said at least one first surface of said at least one relatively rigid substrate by means of an adhesive undersurface.
7. A method according to claim 4 and including the forming of apertures in said at least one relatively rigid substrate and said at least first flexible substrate for mounting thereof on said dielectric support.
8. An antenna assembly comprising:
at least one first relatively rigid substrate; and
at least one first flexible substrate bearing thereon at least one first antenna array including an antenna feed network, adhered to said at least one first relatively rigid substrate.
9. An antenna assembly according to claim 8 and also comprising:
at least one second relatively rigid substrate;
at least one second flexible substrate bearing thereon at least one second antenna array, adhered to said at least one second relatively rigid substrate;
a dielectric spacer element supporting said at least first relatively rigid substrate and said at least second relatively rigid substrate in mutually spaced registration.
10. An antenna assembly according to claim 9 and also comprising at least one third flexible substrate bearing thereon at least one third antenna array, adhered to said at least one first relatively rigid substrate.
11. An antenna assembly according to claim 9 and also comprising a ground plane supported by said dielectric spacer element.
12. An antenna assembly according to claim 8 and also comprising coaxial feed connectors mounted onto said at least one first flexible substrate and said at least one first relatively rigid substrate.
13. An antenna assembly according to claim 8 and wherein an adhesive undersurface of said at least one first flexible substrate adheres said at least one first flexible substrate to said at least one first relatively rigid substrate.
14. An antenna assembly according to claim 9 and wherein an adhesive undersurface of said at least one second flexible substrate adheres said at least one second flexible substrate to said at least one second relatively rigid substrate.
15. An antenna assembly according to claim 10 and wherein an adhesive undersurface of said at least one third flexible substrate adheres said at least one third flexible substrate to said at least one first relatively rigid substrate.
16. An antenna assembly according to claim 9 and wherein the at least one second antenna array comprises an antenna director.
17. An antenna assembly according to claim 10 and wherein the at least one third antenna array comprises a slot array.
18. A method according to claim 5 and including the forming of apertures in said at least one relatively rigid substrate and said at least first flexible substrate for mounting thereof on said dielectric support.
19. An antenna assembly according to claim 10 and also comprising a ground plane supported by said dielectric spacer element.