Skip to content

Creating a grb::Vector< T, grb::reference > when running with bsp1d backend gives runtime error #403

@GiovaGa

Description

@GiovaGa

Consider the following:

#include <graphblas.hpp>

void grb_program( const int &in, int &out ) {
	const size_t s = grb::spmd<>::pid();
	const size_t n = 10;

	std::cerr << "Hello0 from process " << s << std::endl;

	grb::Vector< int > x( n );
	grb::RC rc = grb::SUCCESS;

	grb::Vector< int, grb::reference > mask ( n );
	std::cerr << "Hello1 from process " << s << std::endl;
	assert( rc == grb::SUCCESS );
}

int main( int argc, char ** argv ) {
	int n = 42;
	int error_code = 100;

	grb::Launcher< grb::AUTOMATIC > launcher;
	assert( launcher.exec( &grb_program, n, error_code, true )
		== grb::SUCCESS );
	return error_code;
}

The code compiles without warnings or errors. When running this program terminates with signal 11 (segfault). The output is something like the following:

Info: grb::init (BSP1D) called using 2 user processes.
Info: grb::init (reference) called.
Info: grb::init (reference) called.
Hello0 from process 0
Hello0 from process 1
Info: process mask is all-one, we therefore assume a single user process is present on this node and thus shall use aligned mode for memory allocations that are potentially touched by multiple threads.
Info: process mask is all-one, we therefore assume a single user process is present on this node and thus shall use aligned mode for memory allocations that are potentially touched by multiple threads.
Hello1 from process 0
Info: grb::finalize (bsp1d) called.
	 process 0 is finalising

a.out:25405 terminated with signal 11 at PC=706556ac658e SP=7ffc2f206538.  Backtrace:
[...]

It is notable that if the template argument of launcher instead of grb::AUTOMATIC is grb::FROM_MPI (with the suitable mpi initializations), the same program runs fine.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions