Finds a Character based on distance and health Announcing the arrival of Valued Associate...
Why wasn't DOSKEY integrated with COMMAND.COM?
What is implied by the word 'Desika'
What is the meaning of the simile “quick as silk”?
What font is "z" in "z-score"?
Can an alien society believe that their star system is the universe?
Delete nth line from bottom
Can you use the Shield Master feat to shove someone before you make an attack by using a Readied action?
What do you call the main part of a joke?
Generate an RGB colour grid
Is it ethical to give a final exam after the professor has quit before teaching the remaining chapters of the course?
How does the math work when buying airline miles?
Is "Reachable Object" really an NP-complete problem?
Can a new player join a group only when a new campaign starts?
Around usage results
Amount of permutations on an NxNxN Rubik's Cube
How to write this math term? with cases it isn't working
An adverb for when you're not exaggerating
Do jazz musicians improvise on the parent scale in addition to the chord-scales?
Where are Serre’s lectures at Collège de France to be found?
How can I use the Python library networkx from Mathematica?
Does classifying an integer as a discrete log require it be part of a multiplicative group?
Is this homebrew Lady of Pain warlock patron balanced?
Do I really need recursive chmod to restrict access to a folder?
How do pianists reach extremely loud dynamics?
Finds a Character based on distance and health
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Euclidian distance - optimization and castingSpeed, distance and time calculatorFast Document Distance, C++Pairwise distance and residual calculationSplit a character string based on change of characterDistance and force calculation for a molecular dynamics simulationOpenMP SIMD Euclidean DistanceCalculating Euclidean distanceAlgorithm that parses through input of points and finds distanceReads a inFile and grades tests scores and finds max, min, and avg
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
$begingroup$
I need to improve the efficiency of my program and, using the profiler, have narrowed the problem down to 2 key areas, but I am having trouble coming up with ways to make the program run better.
Based on my profiler's report, it seems to be telling me that my if functions are inefficient. Whats a better way to achieve a better result?
Character* FindAttackTarget() const
{
float weakestHp = FLT_MAX;
Character* weakestEnemy = nullptr;
uint64_t weakestCharId = INT64_MAX;
//Only attack characters that are within attack range
auto& gameChars = m_pGame->m_gameCharacters;
for (size_t i = 0; i < gameChars.size(); ++i)
{
auto& c = gameChars[i];
if (Location.Dist(c.GetLocation()) <= AttackRange &&
c.HP > 0 &&
c.Team != Team)
{
//We want the weakest with the lowest ID number - this keeps consistent results when re-playing the same part of the game (eg. after a load game)
if (c.HP < weakestHp || (c.HP == weakestHp && c.ID < weakestCharId))
{
weakestEnemy = &gameChars[i];
weakestHp = c.HP;
weakestCharId = c.ID;
}
}
}
return weakestEnemy;
}
c++ performance
New contributor
$endgroup$
add a comment |
$begingroup$
I need to improve the efficiency of my program and, using the profiler, have narrowed the problem down to 2 key areas, but I am having trouble coming up with ways to make the program run better.
Based on my profiler's report, it seems to be telling me that my if functions are inefficient. Whats a better way to achieve a better result?
Character* FindAttackTarget() const
{
float weakestHp = FLT_MAX;
Character* weakestEnemy = nullptr;
uint64_t weakestCharId = INT64_MAX;
//Only attack characters that are within attack range
auto& gameChars = m_pGame->m_gameCharacters;
for (size_t i = 0; i < gameChars.size(); ++i)
{
auto& c = gameChars[i];
if (Location.Dist(c.GetLocation()) <= AttackRange &&
c.HP > 0 &&
c.Team != Team)
{
//We want the weakest with the lowest ID number - this keeps consistent results when re-playing the same part of the game (eg. after a load game)
if (c.HP < weakestHp || (c.HP == weakestHp && c.ID < weakestCharId))
{
weakestEnemy = &gameChars[i];
weakestHp = c.HP;
weakestCharId = c.ID;
}
}
}
return weakestEnemy;
}
c++ performance
New contributor
$endgroup$
$begingroup$
Which lines are the ones being flagged by the profiler as slow?
$endgroup$
– 1201ProgramAlarm
1 hour ago
add a comment |
$begingroup$
I need to improve the efficiency of my program and, using the profiler, have narrowed the problem down to 2 key areas, but I am having trouble coming up with ways to make the program run better.
Based on my profiler's report, it seems to be telling me that my if functions are inefficient. Whats a better way to achieve a better result?
Character* FindAttackTarget() const
{
float weakestHp = FLT_MAX;
Character* weakestEnemy = nullptr;
uint64_t weakestCharId = INT64_MAX;
//Only attack characters that are within attack range
auto& gameChars = m_pGame->m_gameCharacters;
for (size_t i = 0; i < gameChars.size(); ++i)
{
auto& c = gameChars[i];
if (Location.Dist(c.GetLocation()) <= AttackRange &&
c.HP > 0 &&
c.Team != Team)
{
//We want the weakest with the lowest ID number - this keeps consistent results when re-playing the same part of the game (eg. after a load game)
if (c.HP < weakestHp || (c.HP == weakestHp && c.ID < weakestCharId))
{
weakestEnemy = &gameChars[i];
weakestHp = c.HP;
weakestCharId = c.ID;
}
}
}
return weakestEnemy;
}
c++ performance
New contributor
$endgroup$
I need to improve the efficiency of my program and, using the profiler, have narrowed the problem down to 2 key areas, but I am having trouble coming up with ways to make the program run better.
Based on my profiler's report, it seems to be telling me that my if functions are inefficient. Whats a better way to achieve a better result?
Character* FindAttackTarget() const
{
float weakestHp = FLT_MAX;
Character* weakestEnemy = nullptr;
uint64_t weakestCharId = INT64_MAX;
//Only attack characters that are within attack range
auto& gameChars = m_pGame->m_gameCharacters;
for (size_t i = 0; i < gameChars.size(); ++i)
{
auto& c = gameChars[i];
if (Location.Dist(c.GetLocation()) <= AttackRange &&
c.HP > 0 &&
c.Team != Team)
{
//We want the weakest with the lowest ID number - this keeps consistent results when re-playing the same part of the game (eg. after a load game)
if (c.HP < weakestHp || (c.HP == weakestHp && c.ID < weakestCharId))
{
weakestEnemy = &gameChars[i];
weakestHp = c.HP;
weakestCharId = c.ID;
}
}
}
return weakestEnemy;
}
c++ performance
c++ performance
New contributor
New contributor
New contributor
asked 4 hours ago
AtazirAtazir
61
61
New contributor
New contributor
$begingroup$
Which lines are the ones being flagged by the profiler as slow?
$endgroup$
– 1201ProgramAlarm
1 hour ago
add a comment |
$begingroup$
Which lines are the ones being flagged by the profiler as slow?
$endgroup$
– 1201ProgramAlarm
1 hour ago
$begingroup$
Which lines are the ones being flagged by the profiler as slow?
$endgroup$
– 1201ProgramAlarm
1 hour ago
$begingroup$
Which lines are the ones being flagged by the profiler as slow?
$endgroup$
– 1201ProgramAlarm
1 hour ago
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
The tests c.HP > 0
and c.Team != Team
are probably blazingly fast tests. Location.Dist(c.GetLocation()) <= AttackRange
probably involves the square-root of the sum of the squares of the difference of coordinates in two or three dimensions. Plus, GetLocation()
may involve memory allocation and/or copying constructors. It is by far the slowest test, yet you are testing it first! Take advantage of the short-circuit logical and
operators by reordering the tests so the fastest tests are done first, so the slowest test may not even need to be executed, resulting in faster execution.
Bonus: the square-root can be avoided; simply compute the square distance, and compare against the $AttackRange^2$ (computed outside of the loop) for another speed gain.
$endgroup$
$begingroup$
I believe you're on the right track but could expand and systematize your answer: for instance, @Atazir could have gameChars partitioned between enemy and the rest, then have the enemy partition sorted by strength, and last find the first enemy in range: the costly operation is performed on the least number of elements.
$endgroup$
– papagaga
44 mins ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Atazir is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217649%2ffinds-a-character-based-on-distance-and-health%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
The tests c.HP > 0
and c.Team != Team
are probably blazingly fast tests. Location.Dist(c.GetLocation()) <= AttackRange
probably involves the square-root of the sum of the squares of the difference of coordinates in two or three dimensions. Plus, GetLocation()
may involve memory allocation and/or copying constructors. It is by far the slowest test, yet you are testing it first! Take advantage of the short-circuit logical and
operators by reordering the tests so the fastest tests are done first, so the slowest test may not even need to be executed, resulting in faster execution.
Bonus: the square-root can be avoided; simply compute the square distance, and compare against the $AttackRange^2$ (computed outside of the loop) for another speed gain.
$endgroup$
$begingroup$
I believe you're on the right track but could expand and systematize your answer: for instance, @Atazir could have gameChars partitioned between enemy and the rest, then have the enemy partition sorted by strength, and last find the first enemy in range: the costly operation is performed on the least number of elements.
$endgroup$
– papagaga
44 mins ago
add a comment |
$begingroup$
The tests c.HP > 0
and c.Team != Team
are probably blazingly fast tests. Location.Dist(c.GetLocation()) <= AttackRange
probably involves the square-root of the sum of the squares of the difference of coordinates in two or three dimensions. Plus, GetLocation()
may involve memory allocation and/or copying constructors. It is by far the slowest test, yet you are testing it first! Take advantage of the short-circuit logical and
operators by reordering the tests so the fastest tests are done first, so the slowest test may not even need to be executed, resulting in faster execution.
Bonus: the square-root can be avoided; simply compute the square distance, and compare against the $AttackRange^2$ (computed outside of the loop) for another speed gain.
$endgroup$
$begingroup$
I believe you're on the right track but could expand and systematize your answer: for instance, @Atazir could have gameChars partitioned between enemy and the rest, then have the enemy partition sorted by strength, and last find the first enemy in range: the costly operation is performed on the least number of elements.
$endgroup$
– papagaga
44 mins ago
add a comment |
$begingroup$
The tests c.HP > 0
and c.Team != Team
are probably blazingly fast tests. Location.Dist(c.GetLocation()) <= AttackRange
probably involves the square-root of the sum of the squares of the difference of coordinates in two or three dimensions. Plus, GetLocation()
may involve memory allocation and/or copying constructors. It is by far the slowest test, yet you are testing it first! Take advantage of the short-circuit logical and
operators by reordering the tests so the fastest tests are done first, so the slowest test may not even need to be executed, resulting in faster execution.
Bonus: the square-root can be avoided; simply compute the square distance, and compare against the $AttackRange^2$ (computed outside of the loop) for another speed gain.
$endgroup$
The tests c.HP > 0
and c.Team != Team
are probably blazingly fast tests. Location.Dist(c.GetLocation()) <= AttackRange
probably involves the square-root of the sum of the squares of the difference of coordinates in two or three dimensions. Plus, GetLocation()
may involve memory allocation and/or copying constructors. It is by far the slowest test, yet you are testing it first! Take advantage of the short-circuit logical and
operators by reordering the tests so the fastest tests are done first, so the slowest test may not even need to be executed, resulting in faster execution.
Bonus: the square-root can be avoided; simply compute the square distance, and compare against the $AttackRange^2$ (computed outside of the loop) for another speed gain.
answered 1 hour ago
AJNeufeldAJNeufeld
7,0541723
7,0541723
$begingroup$
I believe you're on the right track but could expand and systematize your answer: for instance, @Atazir could have gameChars partitioned between enemy and the rest, then have the enemy partition sorted by strength, and last find the first enemy in range: the costly operation is performed on the least number of elements.
$endgroup$
– papagaga
44 mins ago
add a comment |
$begingroup$
I believe you're on the right track but could expand and systematize your answer: for instance, @Atazir could have gameChars partitioned between enemy and the rest, then have the enemy partition sorted by strength, and last find the first enemy in range: the costly operation is performed on the least number of elements.
$endgroup$
– papagaga
44 mins ago
$begingroup$
I believe you're on the right track but could expand and systematize your answer: for instance, @Atazir could have gameChars partitioned between enemy and the rest, then have the enemy partition sorted by strength, and last find the first enemy in range: the costly operation is performed on the least number of elements.
$endgroup$
– papagaga
44 mins ago
$begingroup$
I believe you're on the right track but could expand and systematize your answer: for instance, @Atazir could have gameChars partitioned between enemy and the rest, then have the enemy partition sorted by strength, and last find the first enemy in range: the costly operation is performed on the least number of elements.
$endgroup$
– papagaga
44 mins ago
add a comment |
Atazir is a new contributor. Be nice, and check out our Code of Conduct.
Atazir is a new contributor. Be nice, and check out our Code of Conduct.
Atazir is a new contributor. Be nice, and check out our Code of Conduct.
Atazir is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217649%2ffinds-a-character-based-on-distance-and-health%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Which lines are the ones being flagged by the profiler as slow?
$endgroup$
– 1201ProgramAlarm
1 hour ago