Add sqrt tests from assignment 1
This commit is contained in:
62
tests_ispcpp/sqrt.ispc
Normal file
62
tests_ispcpp/sqrt.ispc
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
static const float kThreshold = 0.00001f;
|
||||
|
||||
export void sqrt_ispc(uniform int N,
|
||||
uniform floating initialGuess,
|
||||
uniform floating values[],
|
||||
uniform floating output[])
|
||||
{
|
||||
foreach (i = 0 ... N) {
|
||||
|
||||
floating x = values[i];
|
||||
floating guess = initialGuess;
|
||||
|
||||
floating pred = abs(guess * guess * x - 1.f);
|
||||
|
||||
while (pred > kThreshold) {
|
||||
guess = (3.f * guess - x * guess * guess * guess) * 0.5f;
|
||||
pred = abs(guess * guess * x - 1.f);
|
||||
}
|
||||
|
||||
output[i] = x * guess;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
task void sqrt_ispc_task(uniform int N,
|
||||
uniform int span,
|
||||
uniform floating initialGuess,
|
||||
uniform floating values[],
|
||||
uniform floating output[])
|
||||
{
|
||||
|
||||
uniform int indexStart = taskIndex * span;
|
||||
uniform int indexEnd = min(N, indexStart + span);
|
||||
|
||||
foreach (i = indexStart ... indexEnd) {
|
||||
|
||||
floating x = values[i];
|
||||
floating guess = initialGuess;
|
||||
|
||||
floating pred = abs(guess * guess * x - 1.f);
|
||||
|
||||
while (pred > kThreshold) {
|
||||
guess = (3.f * guess - x * guess * guess * guess) * 0.5f;
|
||||
pred = abs(guess * guess * x - 1.f);
|
||||
}
|
||||
|
||||
output[i] = x * guess;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export void sqrt_ispc_withtasks(uniform int N,
|
||||
uniform floating initialGuess,
|
||||
uniform floating values[],
|
||||
uniform floating output[])
|
||||
{
|
||||
|
||||
uniform int span = N / 64; // 64 tasks
|
||||
|
||||
launch[N/span] sqrt_ispc_task(N, span, initialGuess, values, output);
|
||||
}
|
||||
Reference in New Issue
Block a user