Can dense container elements be reference parameters?

Can dense container elements be reference parameters?

I'm trying to code up a GCD algorithm. Given two dense containers, num and sum, I want to reduce corresponding elements to lowest terms (as if they were a ratio). One version of my GCD code that works is...

[c++]void find_gcd(dense &gcDiv, dense num, dense sum)
{
   _for (usize i = 0, i < num.length(), ++i) {
      i32 t, u = num[i], v = sum[i];

       _while (v != 0) {
         t = u % v;
         u = v;
         v = t;
      } _end_while;

      gcDiv[i] = u;

   } _end_for;
}[/c++]

Trying to put the _while loop into another function that is called through a for-loop doesn't yield any results.

[c++]void arbb_gcd(i32 &d, i32 n, i32 s)
{
   i32 t, u = n, v = s;

   _while (v != 0) {
      t = u % v;
      u = v;
      v = t;
   } _end_while;
   d = u;
}

void find_gcd(dense &gcDiv, dense num, dense sum)
{		
   _for (usize i = 0, i < num.length(), ++i) {
      call(arbb_gcd)(gcDiv[i], num[i], sum[i]);
   } _end_for;
}[/c++]

But, if I add a dummy variable to take the return variable in find_gcd(), it all works fine.

[c++]void find_gcd(dense &gcDiv, dense num, densesum)
{
   _for (usize i = 0, i < num.length(), ++i) {
      i32 d;
      call(arbb_gcd)(d, num[i], sum[i]);
      gcDiv[i] = d;
   } _end_for;
}[/c++]

Can I not send a singleelement from a dense container as a reference parameter to an ArBB function? Or am Idoing something obviously wrong?

--clay

(Ultimately, I'm hoping to use arbb_gcd() as a map function, but that's another question.)

2 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

This does look like a bug in the ArBB's C++ frontend. However, it's not a good ArBB programming practice anyway. This code does not express any parallelism. There is no point updating individual elements of a dense container using a _for loop when these updates can be done in parallel. You should use a map function here.

Leave a Comment

Please sign in to add a comment. Not a member? Join today